Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 使用XSLT文件时,值为空_Xml_Xslt - Fatal编程技术网

Xml 使用XSLT文件时,值为空

Xml 使用XSLT文件时,值为空,xml,xslt,Xml,Xslt,我目前在转换文件时遇到问题。有人能帮我理解问题是什么吗 我的源文件是: <?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>a

我目前在转换文件时遇到问题。有人能帮我理解问题是什么吗

我的源文件是:

<?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>

abcde
我的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>

我不明白为什么值是空的

提前谢谢大家,


Maxime

您的输入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">
<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"/>

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

谢谢您,马克,这正是我所想的,名称空间的问题!祝您有个美好的一天。
<xsl:value-of select="xdf:xfdf/xdf:fields/xdf:field[@name='A']/xdf:field[@name='0216']/xdf:value"/>