次の方法で共有


XObject.IXmlLineInfo.HasLineInfo メソッド

定義

この XObject に行情報があるかどうかを示す値を取得します。

 virtual bool System.Xml.IXmlLineInfo.HasLineInfo() = System::Xml::IXmlLineInfo::HasLineInfo;
bool IXmlLineInfo.HasLineInfo();
abstract member System.Xml.IXmlLineInfo.HasLineInfo : unit -> bool
override this.System.Xml.IXmlLineInfo.HasLineInfo : unit -> bool
Function HasLineInfo () As Boolean Implements IXmlLineInfo.HasLineInfo

戻り値

XObject に行情報がある場合は true。それ以外の場合は false

実装

この例では、ファイルから小さな XML ツリーを読み込み、基本 URI を設定し、行情報を保持するオプションを設定します。 次に、行情報を持たない別の要素を追加します。 次に、ツリー内の各要素の行情報を出力します。

string markup = @"<Root>
    <Child1 />
    <Child2 />
    <Child4 />
</Root>";

File.WriteAllText("Test.xml", markup);

XElement po = XElement.Load("Test.xml",
    LoadOptions.SetBaseUri | LoadOptions.SetLineInfo);

// add a node to the tree.
// the newly added node will not have line information.
po.Element("Child2").AddAfterSelf(new XElement("Child3"));

string[] splitUri = po.BaseUri.Split('/');
Console.WriteLine("BaseUri: {0}", splitUri[splitUri.Length - 1]);
Console.WriteLine();
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 po.DescendantsAndSelf())
    Console.WriteLine("{0}{1}{2}",
        ("".PadRight(e.Ancestors().Count() * 2) + e.Name).PadRight(20),
        ((IXmlLineInfo)e).HasLineInfo() ?
            ((IXmlLineInfo)e).LineNumber.ToString().PadRight(5) :
            "",
        ((IXmlLineInfo)e).HasLineInfo() ?
            ((IXmlLineInfo)e).LinePosition.ToString() :
            "No Line Information");
Dim markup As String = _
    "<Root>" & Environment.NewLine & _
    "    <Child1 />" & Environment.NewLine & _
    "    <Child2 />" & Environment.NewLine & _
    "    <Child4 />" & Environment.NewLine & _
    "</Root>"

File.WriteAllText("Test.xml", markup)

Dim po As XElement = XElement.Load("Test.xml", LoadOptions.SetBaseUri Or LoadOptions.SetLineInfo)

' add a node to the tree.
' the newly added node will not have line information.
po.Element("Child2").AddAfterSelf(New XElement("Child3"))

Dim splitUri() As String = po.BaseUri.Split("/"c)
Console.WriteLine("BaseUri: {0}", splitUri(splitUri.Length - 1))
Console.WriteLine()
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 po.DescendantsAndSelf()
    Console.WriteLine("{0}{1}{2}", _
        ("".PadRight(e.Ancestors().Count() * 2) & e.Name.ToString).PadRight(20), _
        IIf(DirectCast(e, IXmlLineInfo).HasLineInfo(), _
            DirectCast(e, IXmlLineInfo).LineNumber.ToString().PadRight(5), _
            ""), _
        IIf(DirectCast(e, IXmlLineInfo).HasLineInfo(), _
            DirectCast(e, IXmlLineInfo).LinePosition.ToString(), _
            "No Line Information"))
Next

この例を実行すると、次の出力が生成されます。

BaseUri: Test.xml

Element Name        Line Position
------------        ---- --------
Root                1    2
  Child1            2    6
  Child2            3    6
  Child3            No Line Information
  Child4            4    6

注釈

このメソッドを呼び出して、 に有効な行情報が XObject 含まれているかどうかを確認できます。

このメソッドは、 インターフェイス内 IXmlLineInfo のメソッドの明示的なインターフェイス メンバー実装であるため、このメソッドを呼び出すには、 に IXmlLineInfoキャストする必要があります。

適用対象