【问题标题】:XML Document Transform (XDT) locator for matching missing attribute用于匹配缺失属性的 XML 文档转换 (XDT) 定位器
【发布时间】:2019-10-16 20:17:22
【问题描述】:

假设我有以下 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。)

【问题讨论】:

    标签: asp.net xml web.config-transform xdt


    【解决方案1】:

    XDT 的Match 采用逗号分隔的属性名称列表,因此xdt:Locator="Match(name)" 期望有一个名称为“name”的属性。

    您可能会想到 XPath,其中缺少属性只会返回 false,您可以通过 not(@name) 测试它是否存在。

    XDT 有一个 XPath 函数,它接受一个实际的 XPath,因此您可以编写如下内容:

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

    选择无名的logger 元素。

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

    【讨论】:

    • 我可以使用类似这样的东西:xdt:Locator="Condition(not(@name))" not 运算符正是我所需要的。
    猜你喜欢
    • 1970-01-01
    • 2020-11-04
    • 2013-09-15
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多