[英]XSLT 1.0 Extract values from nested XML
我正在嘗試從現有的XML中獲取特定的XML。 你能幫忙嗎?
源XML:
<?xml version="1.0" encoding="utf-8"?>
<row>
<column name="testName">Test 1</column>
<column name="Tests">
<XmlDoc xmlns="Customers servers">
<Tests>
<Test>
<cuFirst>Hardware</cuFirst>
<cuLast>Server 1</cuLast>
</Test>
<Test>
<cuFirst>Hardware</cuFirst>
<cuLast>Server 2</cuLast>
</Test>
</Tests>
</XmlDoc>
</column>
<column name="Company">Some Company</column>
<column name="Company address" />
<column name="Company URL" />
<column name="Company Alias">Company Alias</column>
</row>
當前的XSLT(無法正常工作); 我確實嘗試了不同的方法,但是什么也沒有。 我會繼續嘗試,但是如果您有任何幫助的想法,請這樣做。
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output indent="no" />
<xsl:template match="/">
<Tests>
<xsl:for-each select="//column[@name='Tests']">
<ci>
<xsl:value-of select="//column[@name='Tests']/XmlDoc/Tests/Test//cuLast" disable-output-escaping="no" />
</ci>
</xsl:for-each>
<Test>
<xsl:value-of select="//column[@name='testName']" disable-output-escaping="no" />
</Test>
</Tests>
</xsl:template>
</xsl:stylesheet>
所需的輸出XML
<Tests>
<Test>
<cuLast>Test 1</cuLast>
</Test>
<Test>
<cuLast>Server 1</cuLast>
</Test>
<Test>
<cuLast>Server 2</cuLast>
</Test>
</Tests>
第一件事: XmlDoc
元素及其所有后代都位於自己的名稱空間中; 您必須在樣式表中聲明此名稱空間,為其分配前綴,並在尋址這些節點時使用該前綴。
同樣,在XSLT中,必須明確:避免// //如果您知道確切的路徑。
嘗試以下樣式表:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:cs="Customers servers"
exclude-result-prefixes="cs">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<Tests>
<Test><xsl:value-of select="row/column[@name='testName']"/></Test>
<xsl:for-each select="row/column[@name='Tests']/cs:XmlDoc/cs:Tests/cs:Test">
<ci>
<xsl:value-of select="cs:cuLast" />
</ci>
</xsl:for-each>
</Tests>
</xsl:template>
</xsl:stylesheet>
當應用於您的輸入時,結果將是:
<?xml version="1.0" encoding="UTF-8"?>
<Tests>
<Test>Test 1</Test>
<ci>Server 1</ci>
<ci>Server 2</ci>
</Tests>
另請注意, "Customers servers"
不是有效的URI,因此不是命名空間的好選擇。 不過,不確定是否對此有任何控制權。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.