gpt4 book ai didi

Java 6 中的 XInclude 支持

转载 作者:行者123 更新时间:2023-12-01 16:39:40 27 4
gpt4 key购买 nike

我已经多次看到这个例子:

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 架构,我只能选择使用索引吗?

最佳答案

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

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

关于Java 6 中的 XInclude 支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7729731/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com