XElement.Parse 方法

定义

从包含 XML 的字符串加载 XElement,还可以选择保留空白和行信息。

重载

Parse(String)

从包含 XML 的字符串加载 XElement

Parse(String, LoadOptions)

从包含 XML 的字符串加载 XElement,还可以选择保留空白和行信息。

Parse(String)

从包含 XML 的字符串加载 XElement

public:
 static System::Xml::Linq::XElement ^ Parse(System::String ^ text);
public static System.Xml.Linq.XElement Parse (string text);
static member Parse : string -> System.Xml.Linq.XElement
Public Shared Function Parse (text As String) As XElement

参数

text
String

一个包含 XML 的 String

返回

XElement

一个使用包含 XML 的字符串填充的 XElement

示例

以下示例创建一个包含 XML 的字符串。 然后,它将字符串分析成一个 XElement

XElement xmlTree = XElement.Parse("<Root> <Child> </Child> </Root>");  
Console.WriteLine(xmlTree);  
Dim xmlTree As XElement = <Root><Child></Child></Root>  
Console.WriteLine(xmlTree)  

该示例产生下面的输出:

<Root>  
  <Child></Child>  
</Root>  

注解

此方法不保留空格。 如果要在 XML 树中保留空格,请使用采用LoadOptions作为参数的方法的Parse重载。 有关详细信息,请参阅 在加载或分析 XML 时保留空白, 并在 序列化时保留空白

LINQ to XML 的加载功能基于 XmlReader。 因此,你可能会捕获重载方法和XmlReader读取和分析文档的方法引发XmlReader.Create的任何异常。

另请参阅

适用于

Parse(String, LoadOptions)

从包含 XML 的字符串加载 XElement,还可以选择保留空白和行信息。

public:
 static System::Xml::Linq::XElement ^ Parse(System::String ^ text, System::Xml::Linq::LoadOptions options);
public static System.Xml.Linq.XElement Parse (string text, System.Xml.Linq.LoadOptions options);
static member Parse : string * System.Xml.Linq.LoadOptions -> System.Xml.Linq.XElement
Public Shared Function Parse (text As String, options As LoadOptions) As XElement

参数

text
String

一个包含 XML 的 String

options
LoadOptions

一个 LoadOptions,指定空白行为以及是否加载基 URI 和行信息。

返回

XElement

一个使用包含 XML 的字符串填充的 XElement

示例

以下示例以两种不同的方式将字符串分析为 XElement :保留空格,而不保留空格。 然后,它使用查询来确定生成的 XML 树中的空白节点数。

int whiteSpaceNodes;  

XElement xmlTree1 = XElement.Parse("<Root> <Child> </Child> </Root>",  
    LoadOptions.None);  
whiteSpaceNodes = xmlTree1  
    .DescendantNodesAndSelf()  
    .OfType<XText>()  
    .Where(tNode => tNode.ToString().Trim().Length == 0)  
    .Count();  
Console.WriteLine("Count of white space nodes (not preserving whitespace): {0}",  
    whiteSpaceNodes);  

XElement xmlTree2 = XElement.Parse("<Root> <Child> </Child> </Root>",  
    LoadOptions.PreserveWhitespace);  
whiteSpaceNodes = xmlTree2  
    .DescendantNodesAndSelf()  
    .OfType<XText>()  
    .Where(tNode => tNode.ToString().Trim().Length == 0)  
    .Count();  
Console.WriteLine("Count of white space nodes (preserving whitespace): {0}",  
    whiteSpaceNodes);  
Dim whiteSpaceNodes As Integer  

Dim xmlTree1 As XElement = XElement.Parse("<Root> <Child> </Child> </Root>", LoadOptions.None)  
whiteSpaceNodes = xmlTree1 _  
    .DescendantNodesAndSelf() _  
    .OfType(Of XText)() _  
    .Where(Function(ByVal tNode As XNode) tNode.ToString().Trim().Length = 0) _  
    .Count()  
Console.WriteLine("Count of white space nodes (not preserving whitespace): {0}", whiteSpaceNodes)  

Dim xmlTree2 As XElement = XElement.Parse("<Root> <Child> </Child> </Root>", LoadOptions.PreserveWhitespace)  
whiteSpaceNodes = xmlTree2 _  
    .DescendantNodesAndSelf() _  
    .OfType(Of XText)() _  
    .Where(Function(ByVal tNode As XNode) tNode.ToString().Trim().Length = 0) _  
    .Count()  
Console.WriteLine("Count of white space nodes (preserving whitespace): {0}", whiteSpaceNodes)  

该示例产生下面的输出:

Count of white space nodes (not preserving whitespace): 0  
Count of white space nodes (preserving whitespace): 3  

以下示例在分析字符串时保留行信息。

string markup =  
@"<Root>  
    <Child>  
        <GrandChild/>  
    </Child>  
</Root>";  

XElement xRoot = XElement.Parse(markup, LoadOptions.SetLineInfo);  
Console.WriteLine("{0}{1}{2}",  
    "Element Name".PadRight(20),  
    "Line".PadRight(5),  
    "Position");  
Console.WriteLine("{0}{1}{2}",  
    "------------".PadRight(20),  
    "----".PadRight(5),  
    "--------");  
foreach (XElement e in xRoot.DescendantsAndSelf())  
    Console.WriteLine("{0}{1}{2}",  
        ("".PadRight(e.Ancestors().Count() * 2) + e.Name).PadRight(20),  
        ((IXmlLineInfo)e).LineNumber.ToString().PadRight(5),  
        ((IXmlLineInfo)e).LinePosition);  
Dim markup As String = _  
"<Root>" & Environment.NewLine & _  
"    <Child>" & Environment.NewLine & _  
"        <GrandChild/>" & Environment.NewLine & _  
"    </Child>" & Environment.NewLine & _  
"</Root>"  

Dim xRoot As XElement = XElement.Parse(markup, LoadOptions.SetLineInfo)  
Console.WriteLine("{0}{1}{2}", _  
    "Element Name".PadRight(20), _  
    "Line".PadRight(5), _  
    "Position")  
Console.WriteLine("{0}{1}{2}", _  
    "------------".PadRight(20), _  
    "----".PadRight(5), _  
    "--------")  
For Each e As XElement In xRoot.DescendantsAndSelf()  
    Console.WriteLine("{0}{1}{2}", _  
        ("".PadRight(e.Ancestors().Count() * 2) & e.Name.ToString).PadRight(20), _  
        DirectCast(e, IXmlLineInfo).LineNumber.ToString().PadRight(5), _  
        DirectCast(e, IXmlLineInfo).LinePosition)  
Next  

该示例产生下面的输出:

Element Name        Line Position  
------------        ---- --------  
Root                1    2  
  Child             2    6  
    GrandChild      3    10  

注解

如果缩进源 XML,则 PreserveWhitespace 设置标志 options 会导致读取器读取源 XML 中的所有空白。 为重要且无关紧要的空白创建类型 XText 节点。

如果缩进源 XML,则不设置 PreserveWhitespace 标志 options 会导致读取器忽略源 XML 中所有无关紧要的空格。 无需任何文本节点即可创建 XML 树,以用于微不足道的空白。

如果未缩进源 XML,则 PreserveWhitespace 设置 options 标志不起作用。 仍保留大量空白,并且没有无关紧要的空白区域,可能会导致创建更多的空白文本节点。

有关详细信息,请参阅 在加载或分析 XML 时保留空白, 并在 序列化时保留空白

从 . String分析时,设置SetBaseUri将不起作用。

XmlReader可能具有有效的行信息。 如果设置 SetLineInfo,则行信息将从所 XmlReader报告的行信息中设置在 XML 树中。

如果设置 SetLineInfo 标志,则会出现性能损失。

加载 XML 文档后,行信息会立即准确。 如果在加载文档后修改 XML 树,则行信息可能毫无意义。

LINQ to XML 的加载功能基于 XmlReader。 因此,你可能会捕获重载方法和XmlReader读取和分析文档的方法引发XmlReader.Create的任何异常。

另请参阅

适用于