相关疑难解决方法(0)

如何从字符串中加载XML中的org.w3c.dom.Document?

我在一个字符串中有一个完整的XML文档,并且想要一个Document对象.谷歌出现了各种各样的垃圾.什么是最简单的解决方案?(在Java 1.5中)

解决方案感谢Matt McMinn,我已经确定了这个实现.它具有适当级别的输入灵活性和异常粒度.(很高兴知道错误是来自格式错误的XML SAXException- 或者只是错误的IO - IOException.)

public static org.w3c.dom.Document loadXMLFrom(String xml)
    throws org.xml.sax.SAXException, java.io.IOException {
    return loadXMLFrom(new java.io.ByteArrayInputStream(xml.getBytes()));
}

public static org.w3c.dom.Document loadXMLFrom(java.io.InputStream is) 
    throws org.xml.sax.SAXException, java.io.IOException {
    javax.xml.parsers.DocumentBuilderFactory factory =
        javax.xml.parsers.DocumentBuilderFactory.newInstance();
    factory.setNamespaceAware(true);
    javax.xml.parsers.DocumentBuilder builder = null;
    try {
        builder = factory.newDocumentBuilder();
    }
    catch (javax.xml.parsers.ParserConfigurationException ex) {
    }  
    org.w3c.dom.Document doc = builder.parse(is);
    is.close();
    return doc;
}
Run Code Online (Sandbox Code Playgroud)

java xml w3c document

103
推荐指数
3
解决办法
12万
查看次数

在DocumentBuilder解析方法中使用一个字符串(需要它使用XPath解析XML)

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

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

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 }
Run Code Online (Sandbox Code Playgroud)

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

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 …
Run Code Online (Sandbox Code Playgroud)

java xml rest

17
推荐指数
1
解决办法
3万
查看次数

从Java中的给定XML创建OpenSAML断言

我一直在反对这一点,并开始取得进展.但是,我遇到了将SAML 2 Assertion(在XML中)的字符串表示形式转换为Assertion对象的问题.

看起来我正在org.w3c.dom.Document使用适当的数据获得有效数据,而且我似乎SAMLObjectBuilder<Assertion>从构建器工厂获得了有效数据,但是当我尝试将它们放在一起时,我得到的只是一个空白的断言; 主题,发行人,发行时间等都是null,尽管它们明确地在XML中设置.

有谁看到我做错了什么,并建议一个解决方案?

Document doc = loadXMLFromString(saml);

XMLObjectBuilderFactory builderFactory = Configuration.getBuilderFactory();

SAMLObjectBuilder<Assertion> assertionBuilder =
  (SAMLObjectBuilder<Assertion>)
  builderFactory.getBuilder(Assertion.DEFAULT_ELEMENT_NAME);

Assertion assertion = assertionBuilder.buildObject(doc.getDocumentElement());

String nameID = assertion.getSubject().getNameID().getValue();
Run Code Online (Sandbox Code Playgroud)

在nameID赋值处,assertion.getSubject()返回null,使表达式的其余部分失败.

我使用的示例是来自sstc-saml-tech-overview-2.0-draft-03,第10页的完整XML.

loadXMLFromString()上面的函数主要是从In Java借来的,我如何将XML解析为String而不是文件?

java xml saml opensaml

9
推荐指数
1
解决办法
8346
查看次数

标签 统计

java ×3

xml ×3

document ×1

opensaml ×1

rest ×1

saml ×1

w3c ×1