我的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(name)}。现在我正在尝试检索子元素的值 - 但它总是给我所有匹配它的行值。例如: ${my-needy-element.my-needy-sub-element(more-attr)} 将打印 some-val,some-diff-val .如何获取属性值匹配到paricular unique name,类似于{my-needy-element.my-needy-sub-element(more-attr),name="uk1"}
添加编辑注释:即使我通过传递"uk1"来使用 xslt ant-task 并获取所需的子元素属性值,有什么方法吗? 使用 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>
谢谢
你不能用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>