xml - 为什么 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>
解决方案
实际上,您缺少两件事:
您正在使用谓词
[@name='TEST:ID']
- 但属性的名称是type
;您的源 XML 在命名空间中;您需要声明与元素开始标记
xpath-default-namespace
中相同的命名空间。xsl:stylesheet
推荐阅读
- python - 如何使用 python psycopg2 库将 bytea 转换或转换为 json
- twitter - TwitterOAuth 和 OpenSSL:来自 Twitter“followers/ids”API 调用的 errno 104
- angular - 在多个组件之间共享样式并对其进行重复数据删除
- jenkins - 从 FreeStyle 作业执行共享库
- r - 如果在 R 中输入超过 46,340 行,则 adespatial 包中的 dbMEM 函数或 Numerical Ecology 2nd Ed Book 中的 quickMEM 函数将停止工作
- php - 不能使用类型的对象?
- scala - 在 Apache Flink 中组合不同键的值
- c# - 获取 ItemsControl MVVM 中的当前项
- jmeter - 请求中缺少 Jmeter Cookie 数据 | 获取对象作为响应移动,页面一次又一次地重定向到登录页面本身
- highcharts - 如果 x 和 x2 值在 X 范围高图中相同怎么办