XElement.Parse 方法

定义

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

重载

Parse(String)

从包含 XML 的字符串加载 XElement

Parse(String, LoadOptions)

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

Parse(String)

Source:
XElement.cs
Source:
XElement.cs
Source:
XElement.cs

从包含 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

返回

从包含 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.Create 重载方法和读取和分析文档的 XmlReader 方法引发的任何异常。

另请参阅

适用于

Parse(String, LoadOptions)

Source:
XElement.cs
Source:
XElement.cs
Source:
XElement.cs

从包含 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 和行信息。

返回

从包含 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,请在 options 中设置 PreserveWhitespace 标志会导致读取器读取源 XML 中的所有空白。 为重要且微不足道的空白创建 XText 类型的节点。

如果源 XML 缩进,则不要在 options 中设置 PreserveWhitespace 标志会导致读取器忽略源 XML 中所有无关紧要的空格。 XML 树是在没有任何文本节点的情况下为微不足道的空白创建的。

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

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

String进行分析时,设置 SetBaseUri 将不起作用。

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

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

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

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

另请参阅

适用于