簡體   English   中英

兄弟節點的XSLT映射

[英]XSLT Mappings for Sibling nodes

我的輸入XML如下所示:

<ORU>
  <OBR>
    <OBR_SetId>1</OBR_SetId>
  </OBR>
  <OBX></OBX>
  <OBX></OBX>
  <OBX></OBX>
  <SPM></SPM>
  <ORC></ORC>
  <OBR>
    <OBR_SetId>2</OBR_SetId>
  </OBR>
  <OBX></OBX>
  <OBX></OBX>
  <OBX></OBX>
  <OBR>
    <OBR_SetId>3</OBR_SetId>
  </OBR>
  <OBX></OBX>
  <OBX></OBX>
  <OBX></OBX>
</ORU>

表示<OBR>是父級,每個都有3個<OBX>子級記錄。 我必須遍歷<OBR>和對應的<OBX>來讀取值。 我正在使用下面的代碼。 但是只有第一個<OBR>子節點也全部不是<OBX> 3。該怎么辦?

<xsl:variable name="OBR" select="//*[local-name()='OBR_ObservationRequest' and namespace-uri()='']" />
  <xsl:for-each select="$OBR">
    <ns0:entity>
      <xsl:variable name="OBR_SetId" select="position()" />

    ................
<xsl:variable name="obx" select="//OBX_ObservationResult[preceding-sibling::OBR_ObservationRequest[1][position() = $OBR_SetId]]" />
      <xsl:if test="count($obx) &gt; 0">
<xsl:for-each select="$obx">
        .......................

嘗試這個:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:template match="/">
    <root>
      <xsl:apply-templates select="//OBR"/>
    </root>
  </xsl:template>

  <xsl:template match="//OBR">
    <xsl:variable name="header" select="."/>
    <OBR>
      <xsl:attribute name="OBR_SetId">
        <xsl:value-of select="./OBR_SetId"/>
      </xsl:attribute>
      <children>
        <xsl:for-each select="following-sibling::OBX[preceding-sibling::OBR[1] = $header]">
          <OBX>
            <xsl:value-of select="."/>
          </OBX>
        </xsl:for-each>
      </children>
    </OBR>
  </xsl:template>

</xsl:stylesheet>

使用以下輸入時:

<ORU>
  <OBR>
    <OBR_SetId>1</OBR_SetId>
  </OBR>
  <OBX>1</OBX>
  <OBX>2</OBX>
  <OBX>3</OBX>
  <SPM/>
  <ORC/>
  <OBR>
    <OBR_SetId>2</OBR_SetId>
  </OBR>
  <OBX>4</OBX>
  <OBX>5</OBX>
  <OBX>6</OBX>
  <OBR>
    <OBR_SetId>3</OBR_SetId>
  </OBR>
  <OBX>7</OBX>
  <OBX>8</OBX>
  <OBX>9</OBX>
</ORU>

我得到以下輸出:

<?xml version="1.0" encoding="utf-8"?>
<root>
  <OBR OBR_SetId="1">
    <children>
      <OBX>1</OBX>
      <OBX>2</OBX>
      <OBX>3</OBX>
    </children>
  </OBR>
  <OBR OBR_SetId="2">
    <children>
      <OBX>4</OBX>
      <OBX>5</OBX>
      <OBX>6</OBX>
    </children>
  </OBR>
  <OBR OBR_SetId="3">
    <children>
      <OBX>7</OBX>
      <OBX>8</OBX>
      <OBX>9</OBX>
    </children>
  </OBR>
</root>

僅供參考:這是基於此處提供的解決方案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM