首页 > 解决方案 > 为什么 xsl:value 没有选择文本?

问题描述

我正在尝试将一些数据从 XML 文件带到另一个 XSL 文件将创建的文件中。但是,我被困在我的 XSL 的一部分上。

XML 源

<?xml version="1.0" encoding="utf-8"?>
<newsMessage xmlns="http://iptc.org/std/nar/2006-10-01/">
    <itemSet>
        <packageItem guid="BLABLA" version="3" standard="NewsML-G2" standardversion="2.7" conformance="power">
            <contentMeta>
                <altId type="TEST:ID">TEST_ID</altId>
            </contentMeta>
        </packageItem>
    </itemSet>
</newsMessage>

XSLT:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xsl:output indent="yes" method="xml"/>
    <xsl:template match="/">
        <xsl:element name="asset">
                    <xsl:value-of select="newsMessage/itemSet/packageItem/contentMeta/altId[@name='TEST:ID']"/>
                </xsl:element>
    </xsl:template>
</xsl:stylesheet>

XML 目标:

<?xml version="1.0" encoding="UTF-8"?>
<asset/>

我想得到:

<?xml version="1.0" encoding="UTF-8"?>
<asset>TEST_ID<asset/>

我确定我错过了一些东西..任何帮助表示赞赏。

编辑,这是正确的 XSL:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xpath-default-namespace="http://iptc.org/std/nar/2006-10-01/">
    <xsl:output indent="yes" method="xml"/>
    <xsl:template match="/">
        <xsl:element name="asset">
                    <xsl:value-of select="newsMessage/itemSet/packageItem/contentMeta/altId[@type='TEST:ID']"/>
                </xsl:element>
    </xsl:template>
</xsl:stylesheet>

标签: xmlparsingxslt

解决方案


实际上,您缺少两件事:

  1. 您正在使用谓词[@name='TEST:ID']- 但属性的名称是type;

  2. 您的源 XML 在命名空间中;您需要声明与元素开始标记xpath-default-namespace中相同的命名空间。xsl:stylesheet


推荐阅读