我需要从xml string
获取一个特定元素才能知道其相应的concrete type
到deserialize
。让我们调用Function Code
作为特定元素,获取此元素对我来说有点挑战。
每个function code
对应于特定的架构设计,它看起来像这样:
1 <?xml version="1.0" encoding="utf-8"?>
2 <Document xmlns="some.namespace.of.schema.design.1">
3 <SchemaDesign1>
4 <Header>
5 <FunctionCode>FunctionCode1</FunctionCode>
6 <OtherElement1>...</OtherElement1>
7 <OtherElement2>...</OtherElement2>
我需要line 5
上{1}}的功能代码元素的值。但请注意,在FunctionCode1
上,元素名称也特定于其line 3
。
因此对于另一个功能代码,例如concrete type
,FunctionCode2
上的元素将不相同:
line 3
我只能考虑使用1 <?xml version="1.0" encoding="utf-8"?>
2 <Document xmlns="some.namespace.of.schema.design.2">
3 <SchemaDesign2>
4 <Header>
5 <FunctionCode>FunctionCode2</FunctionCode>
6 <OtherElement1>...</OtherElement1>
7 <OtherElement2>...</OtherElement2>
并获取string.IndexOf("<FunctionCode>")
的值,直到找到相应的结束标记。如果没有阅读整个字符串,有没有更好的方法呢?
以下是我得到的示例function code
:
XML
答案 0 :(得分:1)
因此,对于每个示例XML,您有两个XDocument
,分别称为doc1
和doc2
,然后此代码:
var ns1 = doc1.Root.GetDefaultNamespace();
var ns2 = doc2.Root.GetDefaultNamespace();
var functionCode1 = doc1.Root.Descendants(ns1 + "FunctionCode").First().Value;
var functionCode2 = doc2.Root.Descendants(ns2 + "FunctionCode").First().Value;
Console.WriteLine(functionCode1);
Console.WriteLine(functionCode2);
...生产:
FunctionCode1 FunctionCode2
因此,鉴于您有这种格式的未知XML文档,一般情况是:
var ns = doc.Root.GetDefaultNamespace();
var functionCode = doc.Root.Descendants(ns + "FunctionCode").First().Value;