LoadOptions Перечисление
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Задает параметры загрузки при анализе XML.
Это перечисление поддерживает побитовую комбинацию значений его членов.
public enum class LoadOptions
[System.Flags]
public enum LoadOptions
[<System.Flags>]
type LoadOptions =
Public Enum LoadOptions
- Наследование
- Атрибуты
Поля
| Имя | Значение | Описание |
|---|---|---|
| None | 0 | Не сохраняет незначительные пробелы или нагрузку базовых URI и сведений о строке. |
| PreserveWhitespace | 1 | Сохраняет незначительные пробелы при синтаксическом анализе. |
| SetBaseUri | 2 | Запрашивает базовые сведения URI из объекта XmlReaderи делает его доступным через BaseUri свойство. |
| SetLineInfo | 4 | Запрашивает сведения о строке из объекта XmlReader и делает его доступным через свойства.XObject |
Примеры
В этом примере загружается небольшое дерево 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
Комментарии
При сохранении пробелов при загрузке все незначительные пробелы в xml-дереве материализуются в xml-дереве, как это. Если вы не сохраняете пробелы, все незначительные пробелы удаляются.
При установке флагов SetBaseUri и SetLineInfo существует штраф производительности.
Базовый универсальный код ресурса (URI) и сведения о строке точны сразу после загрузки XML-документа. При изменении XML-дерева после загрузки документа базовый универсальный код ресурса (URI) и сведения о строке могут стать бессмысленными.
Если базовый XmlReader код ресурса (URI) не имеет базовых URI или сведений о строке, установка setBaseUri и флагов SetLineInfo не будет иметь эффекта.
Этот тип позволяет управлять тем, как LINQ to XML обрабатывает пробелы при загрузке или синтаксическом анализе. Дополнительные сведения см. в разделе "Сохранение пробелов при загрузке или анализе XML " и сохранении пробелов во время сериализации.