gpt4 book ai didi

XSLT 在与根元素具有相同命名空间声明的内部标记中缺少命名空间

转载 作者:行者123 更新时间:2023-12-04 17:02:16 24 4
gpt4 key购买 nike

我想像这样创建xml:

<rns:RootElement xmlns:rns="urn:root-element" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:root-element root-element.xsd">
<rns:DocumentWrapper>
<ins:InnerDoc xmlns:ins="urn:inner-doc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:inner-doc inner-doc.xsd">
<ins:Value>Some text</ins:Value>
</ins:InnerDoc>
</rns:DocumentWrapper>
</rns:RootElement>

使用此模板:
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/">

<rns:RootElement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:rns="urn:root-element"
xsi:schemaLocation="urn:root-element root-element.xsd">
<rns:DocumentWrapper>
<ins:InnerDoc xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ins="urn:inner-doc"
xsi:schemaLocation="urn:inner-doc inner-doc.xsd">
<ins:Value><xsl:value-of select="//*[local-name()='SomeNode']"/></ins:Value>
</ins:InnerDoc>
</rns:DocumentWrapper>
</rns:RootElement>

</xsl:template>

但不是我想要的结果,这个模板给了我一点不同的结果:
<rns:RootElement xmlns:rns="urn:root-element" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:root-element root-element.xsd">
<rns:DocumentWrapper>
<ins:InnerDoc xmlns:ins="urn:inner-doc" xsi:schemaLocation="urn:inner-doc inner-doc.xsd">
<ins:Value>Some text</ins:Value>
</ins:InnerDoc>
</rns:DocumentWrapper>
</rns:RootElement>

如您所见,在转换结果中,InnerDoc 元素缺少 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"命名空间的定义,有什么办法可以防止丢失该命名空间?

最佳答案

作为命名空间声明 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"存在于根元素上,它在子元素和后代元素的范围内,不需要为 ins:InnerDoc 重复。元素。我不知道有什么方法可以使用 XSLT 强制执行重复命名空间声明的输出。

其他一些 API 有一种方法可以抑制它们,例如带有 OmitDuplicateNamespaces 的 LINQ to XML。在 SaveOptions https://msdn.microsoft.com/en-us/library/system.xml.linq.saveoptions(v=vs.110).aspx ,但添加该选项是为了在序列化 LINQ to XML 树时抑制重复的命名空间声明,而不是强制执行它们。

关于XSLT 在与根元素具有相同命名空间声明的内部标记中缺少命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44460411/

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