使用xslt ant检索基于unique-key的子元素属性值

时间:2013-09-27 10:12:07

标签: xslt ant

我的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&amp; samy类似于:$ {db.server(name)}。现在我试图检索子元素的值 - 但它总是 给了我匹配它的所有行值。例如:$ {my-needy-element.my-needy-sub-element(more-attr)}将打印some-val,some-diff-val。如何获得属性值匹配 到特定的唯一名称,如{my-needy-element.my-needy-sub-element(more-attr),名称=“uk1”}

添加编辑评论:即使我通过传递'uk1'和&amp;而使用xslt ant-task也有办法获取所需的子元素属性值?使用xsl:if或key匹配

修改更多:

尝试使用xsl&amp;然后是一个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>

感谢,

1 个答案:

答案 0 :(得分:0)

您无法使用xmlproperty执行此操作,但您可能会考虑允许您使用完整XPath表达式的第三方xmltask

<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>