【问题标题】:how to select the value of element based on where condition from repeating node in xslt如何根据xslt中重复节点的where条件选择元素的值
【发布时间】:2017-09-14 19:08:12
【问题描述】:

我需要使用 XSLT 从这种通用形式的 XML 文件中选择值:

<compartment>
 <receipt>
   <Measurements>
      <Measurement>
          <Identifier>temperature>/Identifier>
          <Quantity>30.0</Quantity>
      </Measurement> 
       <Measurement>
          <Identifier>density>/Identifier>
          <Quantity>30.0</Quantity>
      </Measurement> 
   </Measurements>
</receipt>
<receipt>
   <Measurements>
      <Measurement>
          <Identifier>volume>/Identifier>
          <Quantity>30.0</Quantity>
      </Measurement> 
       <Measurement>
          <Identifier>density>/Identifier>
          <Quantity>30.0</Quantity>
      </Measurement> 
   </Measurements>
</receipt>
<compartment>

具体来说,我想提取其兄弟 值为“温度”的 元素的值。我的问题是我不知道如何只选择包含温度值的 (示例中的第一个)。

我尝试使用此 XSLT,但它无法正常工作:

<Output>
  <xsl:value-of select="normalize-space(compartment/receipt[Measurements/pidx:Measurement[Identifier='Temperature']/Measurements/Measurement[pidx:UnitQualifier='ProductWeight']/Quantity)"/>
</Output>

我该如何解决这个问题?

【问题讨论】:

    标签: xml xslt xslt-1.0 conditional-statements


    【解决方案1】:

    鉴于以下格式良好的输入:

    XML

    <compartment>
      <receipt>
        <Measurements>
          <Measurement>
            <Identifier>temperature</Identifier>
            <Quantity>30.0</Quantity>
          </Measurement>
          <Measurement>
            <Identifier>density</Identifier>
            <Quantity>31.0</Quantity>
          </Measurement>
        </Measurements>
      </receipt>
      <receipt>
        <Measurements>
          <Measurement>
            <Identifier>volume</Identifier>
            <Quantity>32.0</Quantity>
          </Measurement>
          <Measurement>
            <Identifier>density</Identifier>
            <Quantity>33.0</Quantity>
          </Measurement>
        </Measurements>
      </receipt>
    </compartment>
    

    以下样式表:

    XSLT 1.0

    <xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    
    <xsl:template match="/">
        <Output>
            <xsl:value-of select="compartment/receipt/Measurements/Measurement[Identifier='temperature']/Quantity"/>
        </Output>
    </xsl:template>
    
    </xsl:stylesheet>
    

    将返回:

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

    请注意,XML 区分大小写:'Temperature''temperature' 不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-03
      • 2013-02-04
      • 2015-03-12
      • 2020-01-31
      • 1970-01-01
      • 2013-08-23
      • 1970-01-01
      相关资源
      最近更新 更多