首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在XPath方法中使用字符串(使用XPath解析DocumentBuilder时需要它)

在XPath方法中使用字符串(使用XPath解析DocumentBuilder时需要它)
EN

Stack Overflow用户
提问于 2010-05-13 18:04:33
回答 2查看 34.5K关注 0票数 17

我正在尝试使用Java Servlet创建一个RESTful Java服务。问题是我必须通过POST方法向via服务器传递一个请求。此请求的内容不是参数,而是body本身。

所以我基本上从ruby发送了这样的东西:

代码语言:javascript
复制
url = URI.parse(@host)
req = Net::HTTP::Post.new('/WebService/WebServiceServlet')
req['Content-Type'] = "text/xml"
# req.basic_auth 'account', 'password'
req.body = data
response = Net::HTTP.start(url.host, url.port){ |http| puts http.request(req).body }

然后,我必须在我的servlet中检索这个请求的主体。我使用经典的readline,所以我有一个字符串。问题是当我必须将其解析为XML时:

代码语言:javascript
复制
private void useXML( final String soft, final PrintWriter out) throws ParserConfigurationException, SAXException, IOException, XPathExpressionException, FileNotFoundException {
  DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
  domFactory.setNamespaceAware(true); // never forget this!
  DocumentBuilder builder = domFactory.newDocumentBuilder();
  Document doc = builder.parse(soft);

  XPathFactory factory = XPathFactory.newInstance();
  XPath xpath = factory.newXPath();
  XPathExpression expr = xpath.compile("//software/text()");

  Object result = expr.evaluate(doc, XPathConstants.NODESET);
  NodeList nodes = (NodeList) result;
  for (int i = 0; i < nodes.getLength(); i++) {
    out.println(nodes.item(i).getNodeValue()); 
  }
}

问题是builder.parse()接受:parse(File f)parse(InputSource is)parse(InputStream is)

有没有办法将我的xml字符串转换成InputSource或类似的格式?我知道这可能是一个空洞的问题,但Java不是我的事,我是被迫使用它的,而且我不是很熟练。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-13 20:11:57

您可以通过StringReader的方式从字符串创建InputSource:

代码语言:javascript
复制
Document doc = builder.parse(new InputSource(new StringReader(soft)));
票数 52
EN

Stack Overflow用户

发布于 2010-05-13 19:12:52

在您的字符串中,使用类似以下内容:

代码语言:javascript
复制
ByteArrayInputStream input = 
 new ByteArrayInputStream(yourString.getBytes(perhapsEncoding));
builder.parse(input);

ByteArrayInputStream是一个InputStream。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2825872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档