Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将任意XML字符串解析为结构化对象_C#_Xml - Fatal编程技术网

C# 如何将任意XML字符串解析为结构化对象

C# 如何将任意XML字符串解析为结构化对象,c#,xml,C#,Xml,我有一个模式未知的XML数据字符串。我想把它解析成一个树结构,我的代码可以很容易地阅读。例如,如果字符串为: <foo><bar>baz</bar></foo> 并获取baz 编辑:假定的“重复”假设您知道XML的结构/模式。正如我最初所说的,我不是文档。Parse(string)是你的朋友: 听起来很像您想要LinqtoXML所提供的。像这样解析XML: var doc = XDocument.Parse(@"<foo><ba

我有一个模式未知的XML数据字符串。我想把它解析成一个树结构,我的代码可以很容易地阅读。例如,如果字符串为:

<foo><bar>baz</bar></foo>
并获取
baz

编辑:假定的“重复”假设您知道XML的结构/模式。正如我最初所说的,我不是文档。Parse(string)是你的朋友:


听起来很像您想要LinqtoXML所提供的。像这样解析XML:

var doc = XDocument.Parse(@"<foo><bar>baz</bar></foo>");
或:


有关更多信息,请参阅。

我个人同意其他答案,即基于LINQ到XML的解决方案是最好的。比如:

string xml = "<root><foo><bar>baz</bar></foo></root>";
string s = XElement.Parse(xml).Element("foo").Element("bar").Value;
并按照您的要求使用:

string xml = "<root><foo><bar>baz</bar></foo></root>";
MyXmlWrapper wrapper = new MyXmlWrapper(XElement.Parse(xml));
string s = wrapper["foo"]["bar"];
stringxml=“baz”;
MyXmlWrapper=newmyxmlwrapper(XElement.Parse(xml));
字符串s=wrapper[“foo”][“bar”];
从集合返回元素的编辑示例:

string xml = "<root><foo><bar><baz>1</baz><baz>2</baz></bar></foo></root>";
MyXmlWrapper wrapper = new MyXmlWrapper(XElement.Parse(xml));
string baz1 = wrapper["foo"]["bar"]["baz", 0];
string baz2 = wrapper["foo"]["bar"]["baz", 1];
stringxml=“12”;
MyXmlWrapper=newmyxmlwrapper(XElement.Parse(xml));
字符串baz1=包装器[“foo”][“bar”][“baz”,0];
字符串baz2=包装器[“foo”][“bar”][“baz”,1];

Not duplicate的可能重复-这是关于访问已解析的XML对象,而不是反序列化为(强类型)类。@如果架构未知,则无法将XML反序列化为对象。@CharlesMager,请参阅答案。。。显然,你可能会发现有一个重复:OP已经澄清他想要解析任意XML文件。@Leonardoherra这确实解析任意XML文件?不太可能-我们不知道我们将得到什么样的XML。例如,您无法在
12
中获取第二个
baz
元素。
string xml = "<root><foo><bar>baz</bar></foo></root>";
string s = XElement.Parse(xml).Element("foo").Element("bar").Value;
class MyXmlWrapper
{
    XElement _xml;

    public MyXmlWrapper(XElement xml)
    {
        _xml = xml;
    }

    public MyXmlWrapper this[string name, int index = 0]
    {
        get
        {
            return new MyXmlWrapper(_xml.Elements(name).ElementAt(index));
        }
    }

    public static implicit operator string(MyXmlWrapper xml)
    {
        return xml._xml.Value;
    }
}
string xml = "<root><foo><bar>baz</bar></foo></root>";
MyXmlWrapper wrapper = new MyXmlWrapper(XElement.Parse(xml));
string s = wrapper["foo"]["bar"];
string xml = "<root><foo><bar><baz>1</baz><baz>2</baz></bar></foo></root>";
MyXmlWrapper wrapper = new MyXmlWrapper(XElement.Parse(xml));
string baz1 = wrapper["foo"]["bar"]["baz", 0];
string baz2 = wrapper["foo"]["bar"]["baz", 1];