使用 XSLT 提取 cdata 标签内的文本
Extract text inside cdata tag using XSLT
我有以下 XML 和我想从中提取文本的 cdata 标签?
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<cus:TestData xmlns:cus="http://test.namespace.com/data">
<![CDATA[testValue]]></cus:TestData >
如何在 XSLT 中实现这一点?
我正在尝试以下内容
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
"<xsl:value-of select="/*/Name"/>"
</xsl:template>
</xsl:stylesheet>
但是好像没用
此外 XML 也没有相同的前缀或命名空间,它更改
这并不是 CData 的真正问题。您的 XSLT 当前正在根元素下寻找名为 Name
的元素,该元素在您的 XML 中不存在。如果您的 XML 来源是您实际使用的来源,您可以这样做...
<xsl:value-of select="/*"/>
但假设您的 XML 看起来像这样...
<cus:TestData xmlns:cus="http://test.namespace.com/data">
<cus:Name><![CDATA[testValue]]></cus:Name>
</cus:TestData>
然后,您需要考虑 XSLT 中的名称空间,因为 Name
在您的 XML 中的名称空间中,但您的 XSLT 目前正在寻找 Name
没有命名空间中的元素。
像这样的事情会做:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:c="http://test.namespace.com/data">
<xsl:output method="text"/>
<xsl:template match="/">
"<xsl:value-of select="/*/c:Name"/>"
</xsl:template>
</xsl:stylesheet>
请注意,前缀不需要匹配,但名称空间 URI 需要匹配。
如果名称空间 URI 实际上可能不同,您可以改为执行类似的操作...
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
"<xsl:value-of select="/*/*[local-name() = 'Name']"/>"
</xsl:template>
</xsl:stylesheet>
我有以下 XML 和我想从中提取文本的 cdata 标签?
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<cus:TestData xmlns:cus="http://test.namespace.com/data">
<![CDATA[testValue]]></cus:TestData >
如何在 XSLT 中实现这一点?
我正在尝试以下内容
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
"<xsl:value-of select="/*/Name"/>"
</xsl:template>
</xsl:stylesheet>
但是好像没用
此外 XML 也没有相同的前缀或命名空间,它更改
这并不是 CData 的真正问题。您的 XSLT 当前正在根元素下寻找名为 Name
的元素,该元素在您的 XML 中不存在。如果您的 XML 来源是您实际使用的来源,您可以这样做...
<xsl:value-of select="/*"/>
但假设您的 XML 看起来像这样...
<cus:TestData xmlns:cus="http://test.namespace.com/data">
<cus:Name><![CDATA[testValue]]></cus:Name>
</cus:TestData>
然后,您需要考虑 XSLT 中的名称空间,因为 Name
在您的 XML 中的名称空间中,但您的 XSLT 目前正在寻找 Name
没有命名空间中的元素。
像这样的事情会做:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:c="http://test.namespace.com/data">
<xsl:output method="text"/>
<xsl:template match="/">
"<xsl:value-of select="/*/c:Name"/>"
</xsl:template>
</xsl:stylesheet>
请注意,前缀不需要匹配,但名称空间 URI 需要匹配。
如果名称空间 URI 实际上可能不同,您可以改为执行类似的操作...
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
"<xsl:value-of select="/*/*[local-name() = 'Name']"/>"
</xsl:template>
</xsl:stylesheet>