【问题标题】:Removing Attribute value based on value from an XML using VB.Net使用 VB.Net 从 XML 中删除基于值的属性值
【发布时间】:2020-09-04 14:41:29
【问题描述】:

我有一个如下的 XML

<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope
    xmlns="http://com/uhg/uht/uhtSoapMsg_V1"
    xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
    <env:Header>
        <uhtHeader
            xmlns="http://com/uhg/uht/uhtHeader_V1">
            <consumer>COMET</consumer>
            <auditId></auditId>
            <sendTimestamp>2020-09-03T18:15:40.942-05:00</sendTimestamp>
            <environment>P</environment>
            <businessService version="24">getClaimHistory</businessService>
            <status>success</status>
        </uhtHeader>
    </env:Header>
    <env:Body>
        <srvcRspn
            xmlns="http://com/uhg/uht/getClaimHistory_V24">
            <srvcErrList arrayType="srvcErrOccur[1]" type="Array">
                <srvcErrOccur>
                    <orig>Foundation</orig>
                    <rtnCd>00</rtnCd>
                    <explCd>000</explCd>
                    <desc></desc>
                </srvcErrOccur>
            </SrvcErrList>
        </srvcRspn>
    </env:Body>
</env:Envelope>

我想删除所有带有“http”的属性值,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope
    xmlns=""
    xmlns:env="">
    <env:Header>
        <uhtHeader
            xmlns="">
            <consumer>COMET</consumer>
            <auditId></auditId>
            <sendTimestamp>2020-09-03T18:15:40.942-05:00</sendTimestamp>
            <environment>P</environment>
            <businessService version="24">getClaimHistory</businessService>
            <status>success</status>
        </uhtHeader>
    </env:Header>
    <env:Body>
        <srvcRspn
            xmlns="">
            <srvcErrList arrayType="srvcErrOccur[1]" type="Array">
                <srvcErrOccur>
                    <orig>Foundation</orig>
                    <rtnCd>00</rtnCd>
                    <explCd>000</explCd>
                    <desc></desc>
                </srvcErrOccur>
            </SrvcErrList>
        </srvcRspn>
    </env:Body>
</env:Envelope>

我尝试了几种方法,但没有一个对我有用。谁能建议在 VB.NET/C# 中最快的方法。

实际的响应非常大(最少大约 100000 行 XML),并且使用 for each 会消耗大量时间。有没有解析方法或LINQ查询方法可以更快。

【问题讨论】:

  • VB.NET 和 C# 的速度完全相同。用于访问 .net API 的语言对速度毫无意义。
  • 我不能使用 For Each 遍历每个节点并检查,有没有更快的方法来做到这一点是我真正需要的
  • 您不需要删除 XML 属性,您正在尝试摆脱 XML 命名空间。
  • 这能回答你的问题吗? How to remove all namespaces from XML with C#?
  • @Cleptus 感谢您将我重定向到正确的位置。成功了!!!

标签: c# xml vb.net linq


【解决方案1】:

我得到了使用正则表达式的方法,如下所示:

Return Regex.Replace(xmlDoc, "((?<=<|<\/)|(?<= ))[A-Za-z0-9]+:| xmlns(:[A-Za-z0-9]+)?="".*?""", "")

它完全符合我的目的。感谢 Cleptus 的快速参考。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多