[英]XSLT 1.0 - Merge sibling nodes with child nodes into new composite nodes
[英]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) > 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.