gpt4 book ai didi

xml - 使用 XSLT 文件时值为空

转载 作者:数据小太阳 更新时间:2023-10-29 02:30:38 25 4
gpt4 key购买 nike

我目前在转换文件时遇到问题。谁能帮助我了解问题所在?

我的源文件是:

<?xml version="1.0" encoding="UTF-8"?>
<xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve">
<fields>
<field name="A">
<field name="0216"><value>abcde</value></field>
</field>
<fields>
</xfdf>

我的 XSLT 文件是:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<personalData>
<personal>
<name>
<xsl:value-of select="//field[@name='A']//field[@name='0216']//value"/>
</name>
</personal>
</personalData>
</xsl:template>
</xsl:stylesheet>

输出文件是:

<?xml version="1.0" encoding="UTF-8"?>
<personalData>
<personal>
<name/>
</personal>
</personalData>

我不明白为什么这个值是空的...

提前谢谢你,

马克西姆

最佳答案

您的输入 XML 有一个声明为 xmlns="http://ns.adobe.com/xfdf/" 的默认命名空间。这意味着所有没有前缀的元素都属于这个命名空间。

因此,您还应该在 XSLT 中声明命名空间。最好有一个前缀,像这样:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xdf="http://ns.adobe.com/xfdf/" exclude-result-prefixes="xdf">

exclude-result-prefixes="xdf" 不会将 namespace 输出到您的结果 XSLT 中。现在您已经声明了命名空间,您可以使用此前缀选择属于此命名空间的节点,如下所示:

<xsl:value-of select="//xdf:field[@name='A']//xdf:field[@name='0216']//xdf:value"/>

另请注意,每次使用 // 时都会遍历所有元素。为了更有效地编写一个 XPath 来直接找到节点:

<xsl:value-of select="//xdf:field[@name='A']/xdf:field[@name='0216']/xdf:value"/>

第一个 // 将从根开始搜索所有元素。在找到 @name 等于值 Axdf:field 之后,由于使用 /,它将完成这三个操作>.

你甚至可以去掉第一个//:

<xsl:value-of select="xdf:xfdf/xdf:fields/xdf:field[@name='A']/xdf:field[@name='0216']/xdf:value"/>

请注意,它不是以 / 开头的,因为您已经在模板匹配的根上。

关于xml - 使用 XSLT 文件时值为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19857187/

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