gpt4 book ai didi

具有默认命名空间设置为 xmlns 的 XML 源的 XSLT

转载 作者:行者123 更新时间:2023-12-03 05:45:59 26 4
gpt4 key购买 nike

我有一个 XML 文档,其根目录中标明了默认命名空间。像这样的事情:

<MyRoot xmlns="http://www.mysite.com">
<MyChild1>
<MyData>1234</MyData>
</MyChild1>
</MyRoot>

用于解析 XML 的 XSLT 无法按预期工作,因为默认命名空间,即当我删除命名空间时,一切都会正常工作预计。

这是我的 XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:template match="/" >
<soap:Envelope xsl:version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<NewRoot xmlns="http://wherever.com">
<NewChild>
<ChildID>ABCD</ChildID>
<ChildData>
<xsl:value-of select="/MyRoot/MyChild1/MyData"/>
</ChildData>
</NewChild>
</NewRoot>
</soap:Body>
</soap:Envelope>
</xsl:template>
</xsl:stylesheet>

需要对 XSLT 文档做什么才能使翻译正常进行? XSLT 文档到底需要做什么?

最佳答案

您需要在 XSLT 中声明 namespace ,并在 XPath 表达式中使用它。例如:

<xsl:stylesheet ... xmlns:my="http://www.mysite.com">

<xsl:template match="/my:MyRoot"> ... </xsl:template>

</xsl:stylesheet>

请注意,如果您想在 XPath 中引用该命名空间中的元素,您必须提供一些前缀。虽然您可以在没有前缀的情况下执行 xmlns="..." ,并且它适用于文字结果元素,但它不适用于 XPath - 在 XPath 中,无前缀的名称始终被视为位于具有空白 URI 的命名空间中,无论范围内有任何 xmlns="..."

关于具有默认命名空间设置为 xmlns 的 XML 源的 XSLT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1344158/

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