2013-09-27 138 views
0

我的XML看起來是這樣的:檢索子元素屬性的值

<someRoot 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:noNamespaceSchemaLocation="../my.xsd"> 

    <position name="quality"> 

     <db> 
      <server name="blah-blah" type="xyz"/> 
     </db> 

     <some-more-element value="12345"/> 

     <my-needy-element> 
      <my-needy-sub-element name="uk1" 
        value="a,b,c" 
        more-attr="some-val"/> 
      <my-needy-sub-element name="uk2" 
          value="x,b,y,c" 
        more-attr="some-diff-val"/> 
     </my-needy-element> 

     </position> 
</someRoot> 

檢索說我的單數據庫服務器名稱的工作後,我做xmlproperty &薩米類似:$ {db.server(名稱)}。現在我正在嘗試檢索子元素的值 - 但它總是會給我所有與其匹配的行值。例如:$ {my-needy-element.my-needy-sub-element(more-attr)}將打印some-val,some-diff-val。我如何獲得屬性值 到特殊的唯一名稱,如{my-needy-element.my-needy-sub-element(more-attr)with name =「uk1」}

添加編輯註釋:Is有沒有辦法,即使我通過傳遞'uk1'使用xslt ant任務&獲取所需的子元素屬性值?以xsl:if或鑰匙匹配

修訂更多:

有使用XSL &那麼XSLT螞蟻嘗試,但它亙古不變的似乎給了我所期待的:

<xsl:template match="/someRoot/my-needy-element/my-needy-sub-element"> 

     <someRoot> 
       <xsl:key name="my-needy-sub-element" match="text()" use="@name"/> 
      <xsl:apply-templates select="key('name',$xslParamPassed)"/> 
     </someRoot> 
    </xsl:template> 

感謝,

回答

0

你不能用xmlproperty來做到這一點,但你可以考慮第三方xmltask它可以讓你使用完整的XPath表達式:

<xmltask source="file.xml"> 
    <copy path="/someRoot/position/my-needy-element/my-needy-sub-element[@name='uk1']/@more-attr" 
     property="more.attr" /> 
</xmltask> 
<echo>${more.attr}</echo> 
+0

感謝您的支持。但是,即使我通過傳遞'uk1'並獲取所需的子元素屬性值來使用xslt ant-task,是否還有任何方法? – user1587504