【问题标题】:select value of an element which has a namespace assigned选择分配有命名空间的元素的值
【发布时间】:2013-06-12 14:39:11
【问题描述】:

我正在尝试对 edifabric x12 xml 文件进行简单的 xsl 转换。 如何选择<D_744_1> 元素?

示例 XML:

<INTERCHANGE xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="www.edifabric.com/x12">
    <S_ISA>
        <D_744_1>00</D_744_1>
    </S_ISA> 
</INTERCHANGE>

XSL 示例:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <testfield><xsl:value-of select="INTERCHANGE/S_ISA/D_744_1" /></testfield>
    </xsl:template>
</xsl:stylesheet>

结果:

<?xml version="1.0" encoding="utf-8"?>
<testfield/>

期望的结果:

 <?xml version="1.0" encoding="utf-8"?>
    <testfield>00</testfield>

更新答案感谢@ChriPf

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:edi="www.edifabric.com/x12" exclude-result-prefixes="edi">

    <xsl:template match="edi:INTERCHANGE">
        <testfield><xsl:value-of select="edi:S_ISA/edi:D_744_1" /></testfield>
    </xsl:template>

</xsl:stylesheet>

【问题讨论】:

  • 能否请您也插入所需的结果以显示问题所在?

标签: xml xslt xslt-1.0 xsl-stylesheet


【解决方案1】:

您的解决方案可能如下所示:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:edi="www.edifabric.com/x12">
  <xsl:template match="edi:D_744_1">
    <xsl:element name="testfield">
        <xsl:copy-of select="." />
    </xsl:element>
</xsl:template>
</xsl:stylesheet>

如果您的 xml 中有默认命名空间,您也必须在 xsl 中定义它。查找更多信息,例如here.

【讨论】:

  • 结果看起来很奇怪。 00 它的值周围没有 xml 元素
  • 奇怪,当我在 online-toolz.com/tools/xslt-transformation.phpfreeformatter.com/xsl-transformer.htmlmarkbucayan.appspot.com/xslt/index.html 上尝试它时,我要么得到错误,要么结果没有 xml 元素,只有值 00。氧气给了我相同的结果(没有名为 testfield 的 xml 元素):-/
  • 对不起,我似乎匹配中的路径不起作用...... - 但是,也许只选择“D_744_1” - 字段的解决方案给出了所需的结果 - 只是不确定这是否足够你的情况
  • 那好多了:) 有没有机会删除结果的所有命名空间?
猜你喜欢
  • 2011-01-04
  • 2010-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多