gpt4 book ai didi

java - 如何使用 idref 获取 xml 元素的内容

转载 作者:行者123 更新时间:2023-11-30 04:58:46 27 4
gpt4 key购买 nike

我有一个 XML 架构:-

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="unqualified">

<xsd:element name="Person">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Name" type="xsd:string"/>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:ID" use="required"/>
</xsd:complexType>
</xsd:element>

<xsd:element name="Book">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Title" type="xsd:string"/>
<xsd:element name="Author">
<xsd:complexType>
<xsd:attribute name="idref" type="xsd:IDREF"
use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>

<xsd:element name="root">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="Person" />
<xsd:element ref="Book" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>

</xsd:schema>

与上面的 XML 模式相对应,我有以下传入的 XML:-

<?xml version="1.0" encoding="utf-8" ?> 
<root>

<Person id="P234">
<Name>0002</Name>
</Person>
<Book>
<Title>0001</Title>
<Author idref="P234"/>
</Book>

</root>

我知道使用 XML 解析器验证,我可以验证上述 XML 是否符合我的 XML 模式。例如id 和 idref 应该存在。现在我想知道哪个解析器(SAX/DOM/STAX)可以根据 idref 获取完整的 XML 元素。所以基本上在上面的例子中,once parser reaches idref="P234", it should return me complete <Person>...</Person> 。另一个查询是是否有任何解析器支持 id 和 idref 合并,它可以用实际元素替换 idref 的内容并返回合并的 XML。

最佳答案

据我所知,解析器不会这样做。使用 XSLT 发挥魔法。而且,idrefs可以是自引用的,具有循环依赖,所以不可能只是“用实际元素替换内容”。

例如假设您有 xml:

<?xml version="1.0" encoding="utf-8" ?> 
<root>
<Person id="P234">
<Name>0002</Name>
<WroteBook idref="B442"/>
</Person>
<Book id="B442">
<Title>0001</Title>
<Author idref="P234"/>
</Book>
</root>

您对解析器有何期望?

XSLT(不过我自己没有测试过):

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@idref">
<xsl:apply-templates select="id(.)"/>
</xsl:template>
</xsl:stylesheet>

关于java - 如何使用 idref 获取 xml 元素的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7646440/

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