从 c# 中的字符串变量解析 XML 命名空间

Parse the XML namespace from string variable in c#

我收到以下请求数据:-

<NS2:GETREQUEST 
    XMLNS:NS2='HTTP://WWW..ORG/SCHEMA/NAXML/V01' 
    XMLNS:NS4='HTTP://WWW..ORG/SCHEMA/CORE/V01' 
    XMLNS:NS3='HTTP://WWW.NAXML.ORG/VOCABULARY/2020-10-16'>
    <NS2:REQUESTHEADER>
        <NS2:VERSION>1.1</NS2:VERSION>
        <NS3:NAME>VIP</NS3:NAME>
        <NS3:MODELVERSION>3.00</NS3:MODELVERSION>
        <NS2:SEQUENCEID>1-101</NS2:SEQUENCEID>
        <NS2:LOCATIONID>7895</NS2:LOCATIONID>
    </NS2:REQUESTHEADER>
</NS2:GETREQUEST>

现在我将这些数据存储在字符串变量中。现在我想从生成的请求中找到 SequenceID 但我找不到 SequenceID.

我在解析 xml 数据时遇到错误 :-

XDocument doc = XDocument.Parse(requesttcpdata);

'NS2' is an undeclared prefix. Line 1, position 2.

谁能告诉我怎么做?

您输入的字符串看起来像 XML,但事实并非如此。因此,您无法使用 XML 解析器对其进行解析。

话虽如此,看起来您的输入文件可以通过小写 xmlns: 属性的前缀转换为真正的 XML。为确保您不会在 xmlns 出现在值本身时意外修改它,我建议您使用相当严格的字符串替换检查:

string input = @"<NS2:GETREQUEST 
    XMLNS:NS2='HTTP://WWW..ORG/SCHEMA/NAXML/V01' 
    XMLNS:NS4='HTTP://WWW..ORG/SCHEMA/CORE/V01' 
    XMLNS:NS3='HTTP://WWW.NAXML.ORG/VOCABULARY/2020-10-16'>
    <NS2:REQUESTHEADER>
        <NS2:VERSION>1.1</NS2:VERSION>
        <NS3:NAME>VIPER</NS3:NAME>
        <NS3:MODELVERSION>3.00</NS3:MODELVERSION>
        <NS2:SEQUENCEID>1-101</NS2:SEQUENCEID>
        <NS2:LOCATIONID>7895</NS2:LOCATIONID>
    </NS2:REQUESTHEADER>
</NS2:GETREQUEST>";
        
const string brokenHeader = @"<NS2:GETREQUEST 
    XMLNS:NS2='HTTP://WWW..ORG/SCHEMA/NAXML/V01' 
    XMLNS:NS4='HTTP://WWW..ORG/SCHEMA/CORE/V01' 
    XMLNS:NS3='HTTP://WWW.NAXML.ORG/VOCABULARY/2020-10-16'>";
    
const string fixedHeader = @"<NS2:GETREQUEST 
    xmlns:NS2='HTTP://WWW..ORG/SCHEMA/NAXML/V01' 
    xmlns:NS4='HTTP://WWW..ORG/SCHEMA/CORE/V01' 
    xmlns:NS3='HTTP://WWW.NAXML.ORG/VOCABULARY/2020-10-16'>";
        
if (input.StartsWith(brokenHeader)) 
{
    input = fixedHeader + input.Substring(brokenHeader.Length);
}
        
var x = XDocument.Parse(input); // works now