2015-04-06 52 views
1

说我有以下XML:XML转换定位匹配丢失属性

<logger> 
    <level value="ALL" /> 
    <appender-ref ref="AsyncAppender" /> 
</logger> 
<logger name="PerformanceMetricsLog"> 
    <level value="OFF" /> 
</logger> 

我需要做这样的一个XML转换。

我该怎么做xdt:Locator匹配或第一个?而在第二个?

我试着只是在做xdt:Locator="Match(name)",我得到一个错误,没有“名称”属性。 (我曾希望,如果属性是不存在它只是优雅地为比赛返回false。)

回答

1

XDT的Match用逗号分隔的属性名称列表,所以xdt:Locator="Match(name)"期待在那里与名称的属性, “名称”。

您可能会想到XPath,其中没有属性会简单地返回false,并且您可以通过not(@name)来测试它的缺失。

XDT有XPath功能,这需要一个实际的XPath,所以你可以写这样的:

xdt:Locator="XPath(//logger[not(@name)])" 

选择无名logger元素。

注意:您写入的XML格式不正确。确保在实际的XML中有一个根元素。

+1

我能够使用类似这样的东西:'xdt:Locator =“Condition(not(@name))'''not'操作符是我所需要的。 – Vaccano