【问题标题】:XInclude support in Java 6X包括对 Java 6 的支持
【发布时间】:2011-12-05 11:53:56
【问题描述】:

这个例子我已经看过好几次了:

public class XIncludeTest {

  public static void main(String[] args) throws Exception {
      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
      factory.setNamespaceAware(true);
      factory.setXIncludeAware(true);
      DocumentBuilder docBuilder = factory.newDocumentBuilder();
      System.out.println("isXIncludeAware " + docBuilder.isXIncludeAware());
      Document doc = docBuilder.parse(args[0]);

      Transformer transformer = TransformerFactory.newInstance().newTransformer();
      transformer.setOutputProperty(OutputKeys.INDENT, "yes");

      //initialize StreamResult with File object to save to file
      StreamResult result = new StreamResult(new StringWriter());
      DOMSource source = new DOMSource(doc);
      transformer.transform(source, result);

      String xmlString = result.getWriter().toString();
      System.out.println(xmlString);    
    }
}

我将这个简单的 xml 文件传入:

a.xml
<?xml version="1.0" encoding="UTF-8"?>
<a xmlns:xi="http://www.w3.org/2003/XInclude">
  <xi:include href="b.xml" xpointer="element(/b/c)"/>
  <xi:include href="b.xml" xpointer="element(/b/d)"/>
</a>

b.xml
<?xml version="1.0" encoding="UTF-8"?>
<b>
  <c>1</c>
  <d>2</d>
</b>

我得到的只是 a.xml 的内容,如上所述 - 没有包含 b.xml 的任何部分。我已经尝试了 xpointer 语法的无尽变化,但无济于事。然而,我已经能够通过 XML::LibXML 让事情在 perl 中工作,但我需要它才能在 Java 中工作。

我没有得到什么?

好的,现在我已将我的 xml 文件更新为可以使用的内容:

a.xml
<?xml version="1.0" encoding="UTF-8"?>
<a xmlns:xi="http://www.w3.org/2001/XInclude">
  <xi:include href="b.xml" xpointer="element(/1/1)"/>
  <xi:include href="b.xml" xpointer="element(/1/2)"/>
</a>

我宁愿不在文档中使用偏移量——名称要好得多(就像在 a.xml 的第一个版本中一样)。我试图理解XPointer Framework 并且一直在使用XPath and XPointer/XPointer Syntax 作为参考 - 似乎我应该能够使用“速记”指针,但前提是 NCName 匹配某些 ID 类型属性。问题是我没有定义“ID 类型属性”的 DTD 或模式。鉴于 Java 解析器不支持 xpointer 模式,我唯一的选择是使用索引吗?

【问题讨论】:

    标签: xinclude


    【解决方案1】:

    xi 前缀的命名空间应该是“http://www.w3.org/2001/XInclude”(注意 2001 不是 2003)。详情请见http://www.w3.org/TR/xinclude/

    这让您想到了下一个问题:您的元素方案 xpointer 的语法不正确。请参阅http://www.w3.org/TR/xptr-element/ 了解更多信息。

    【讨论】:

      猜你喜欢
      • 2018-10-03
      • 1970-01-01
      • 2010-10-09
      • 2011-03-28
      • 1970-01-01
      • 1970-01-01
      • 2012-10-13
      • 1970-01-01
      相关资源
      最近更新 更多