2012-05-22 92 views
2

這裏的價值選擇XML元素是我的XML:XSLT:如何根據同級元素

<root> 
<parameters> 
<parameter> 
    <key>sEmail</key> 
    <value>[email protected]</value> 
    <type>string</type> 
    <length>255</length> 
</parameter> 
<parameter> 
    <key>sFirstName</key> 
    <value>Bill</value> 
    <type>string</type> 
    <length>40</length> 
</parameter> 
</parameters> 
<root> 

我要檢索的關鍵sEmail的值,並將其添加作爲根屬性元素使用XML到XML xslt。

這是預期的結果:

<root email="[email protected]"> 
<parameters> 
    <parameter> 
     <key>sEmail</key> 
     <value>[email protected]</value> 
     <type>string</type> 
     <length>255</length> 
    </parameter> 
    <parameter> 
     <key>sFirstName</key> 
     <value>Bill</value> 
     <type>string</type> 
     <length>40</length> 
    </parameter> 
</parameters> 
<root> 

類似的東西來this link但元素,而不是屬性的值。

有人可以幫助我嗎?由於

回答

2

您可以測試一個子元素的值是 'sEmail':

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="parameters"> 
    <parameters> 
     <xsl:attribute name="email"> 
     <xsl:value-of select="parameter[key='sEmail']/value"/> 
     </xsl:attribute> 
     <xsl:copy-of select="*"/> 
    </parameters> 
    </xsl:template> 

    <xsl:template match="node() | @*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node() | @*"/> 
    </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet> 
+0

完美,可以接受在2分鐘你的答案。正在嘗試做同樣的事情,但只是一個變量,不知道爲什麼它不起作用 – Lucas

+0

@Lucas歡迎您問爲什麼你的方法不起作用(在一個新的問題)。這可能有助於理解XSLT,它通常適用於我。 – topskip

2

能在一個更清潔的方式來完成使用AVT

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="node()|@*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="/*"> 
    <root email="{*/*[key = 'sEmail']/value}"> 
    <xsl:apply-templates/> 
    </root> 
</xsl:template> 
</xsl:stylesheet> 

當這種轉換應用於提供的XML文檔:

<root> 
    <parameters> 
     <parameter> 
      <key>sEmail</key> 
      <value>[email protected]</value> 
      <type>string</type> 
      <length>255</length> 
     </parameter> 
     <parameter> 
      <key>sFirstName</key> 
      <value>Bill</value> 
      <type>string</type> 
      <length>40</length> 
     </parameter> 
    </parameters> 
</root> 

的希望,正確的結果產生:

<root email="[email protected]"> 
    <parameters> 
     <parameter> 
     <key>sEmail</key> 
     <value>[email protected]</value> 
     <type>string</type> 
     <length>255</length> 
     </parameter> 
     <parameter> 
     <key>sFirstName</key> 
     <value>Bill</value> 
     <type>string</type> 
     <length>40</length> 
     </parameter> 
    </parameters> 
</root>