我在PHP codeigniter框架中使用XSLT來更改XML格式。避免再生父節點(如果它已經存在於XML中)
輸入就像
<data>
<person_name>value</person_name>
<person_address>value</person_address>
<person_bloodGroup>value</person_bloodGroup>
<person_weight>value</person_weight>
</data>
和我想把它轉換成
<data>
<frm:details>
<d:name>value</d:name>
<d:address>value</d:address>
</frm:details>
<frm:health>
<d:bloodGroup>value</d:bloodGroup>
<d:weight>value</d:weight>
</frm:health>
</data>
我使用XSLT作爲
<xsl:template match="person_name">
<frm:details>
<d:name>
<xsl:apply-templates/>
</d:name>
</frm:details>
</xsl:template>
<xsl:template match="person_address">
<frm:details>
<d:address>
<xsl:apply-templates/>
</d:address>
</frm:details>
</xsl:template>
<xsl:template match="person_bloodGroup">
<frm:health>
<d:bloodGroup>
<xsl:apply-templates/>
</d:bloodGroup>
</frm:health>
</xsl:template>
<xsl:template match="person_address">
<frm:health>
<d:weight>
<xsl:apply-templates/>
</d:weight>
</frm:health>
</xsl:template>
但它產生FRM:細節分別標記兩次姓名和地址。我不熟悉XSLT。是否有任何方法,以便我可以檢查父節點是否已經存在,然後在其中添加子節點而不重新生成父節點。 我得到輸出
<frm:details>
<d:name>value</d:name>
</frm:details>
<frm:details>
<d:address>value</d:address>
</frm:details>
<frm:health>
<d:bloodGroup>value</d:bloodGroup>
</frm:health>
<frm:health>
<d:weight>value</d:weight>
</frm:health>
請發表[MCVE] 。我們需要在您的輸入中查看「person_name」和「person_address」的父元素,以及您當前的XSLT如何處理它。 –
原始XML太大且機密,無法共享。我剛剛創建了類似的場景。但是person_name和person_address將在單個節點下。可以認爲是數據節點。輸入中不使用嵌套節點。 – hrishi