C# 读取xml中特定节点的属性值 xmldocument方式
2009-06-04 22:44
756 查看
http://www.cnblogs.com/kiddo/archive/2007/09/03/879932.html
2007-06-08 17:55
下面这个xml
文件,要找的路径是"WTTData"Component"ComponentData"ComponentData"ObjectQueryBuilder 找属性field为datastore的expression节点的value值.
<WTTData>
<Component SetName="Explorers"
GroupName="JobExplorer">
<ComponentData Name="JobExplorer"
Version="2.2.2098.0">
<ComponentData Name="HorzSplitter"
Version="2.2.2098.0">
<Data Position="185" />
</ComponentData>
<ComponentData Name="VertSplitter"
Version="2.2.2098.0">
<Data Position="150" />
</ComponentData>
<ComponentData
Name="TabbedObjectTreeControl" Version="2.2.2098.0"
Visible="True">
<Data SelectedTreeNodePath="$"
CurrentTab="0" />
</ComponentData>
<ComponentData Name="ConfigurableListControl"
Version="2.2.2098.0">
<Column Name="" Width="32"
SortIndex="0" SortOrder="None" ColumnOrder="0" Default="True"
/>
<Column Name="Id" Width="70" SortIndex="-1"
SortOrder="None" ColumnOrder="1" Default="True" />
<Column
Name="Name" Width="352" SortIndex="-1" SortOrder="None" ColumnOrder="2"
Default="True" />
<Column Name="AssignedToAlias" Width="80"
SortIndex="-1" SortOrder="None" ColumnOrder="3" Default="True"
/>
<Column Name="FullPath" Width="190" SortIndex="-1"
SortOrder="None" ColumnOrder="4" Default="True" />
<Column
Name="LastUpdatedTime" Width="150" SortIndex="1" SortOrder="Descending"
ColumnOrder="5" Default="True" />
</ComponentData>
<ComponentData Name="QueryBuilder"
Version="2.2.2098.0" Visible="True">
<ObjectQueryBuilder
ControlType="Microsoft.DistributedAutomation.UI.QueryBuilder"
ControlAssembly="Microsoft.WTT.UI.Controls.ObjectControls" Assembly="WTTOMJobs"
Type="Microsoft.DistributedAutomation.Jobs.Job" Title="Job
Query">
<Expression Index="1" Static="True" AttachWith=""
Mapping="DataStore" Field="DataStore" Operator="Equals" Value="WTTMobile1"
/>
<Expression AttachWith="And" Mapping="Id" Field="ID"
Operator="Greater" Value="733454" />
<Expression
AttachWith="And" Mapping="Id" Field="ID" Operator="Less" Value="733740"
/>
</ObjectQueryBuilder>
</ComponentData>
<ComponentData Name="ToolBar"
Version="2.2.2098.0">
<Data
DefinitionController="WTTMobile1" HideQueryBuilder="True" HideHierarchy="True"
MaxItemsToDisplay="500" />
</ComponentData>
</ComponentData>
</Component>
<ActiveComponent
SetName="Explorers" GroupName="JobExplorer" />
</WTTData>
实现代码是:
{
{
xDoc.Load(filename);
xElem1 = (
{
dataStoreString = xElem1.GetAttribute(
}
}
}
1,定义一个XmlDocument对象xDoc
2,通过XmlDocument来load需要读取的xml文件
3,通过XmlDocument的SelectSingleNode来找到节点,并把节点转换为XmlElement
4,XmlElement
可以对节点的属性进行操作
注意两点:
1,
其中xDoc.SelectSingleNode("descendant::Expression[@Field='DataStore']"
);
SelectSingleNode参数里带有过滤条件,匹配公式是
descendant::nodename[@attribute='attributevalue']
2,xElem1 = (XmlElement
)xDoc.SelectSingleNode("descendant::Expression[@Field='DataStore']"
);把XmlNode强制转为XmlElement,理由是XmlElement是XmlNode的子类,前者比后者提供更多好用的方法,比如属性的读和写.XmlNode除了可以转为XmlAttribute.
static
public
string
getDataStore(
string
filename)
string
dataStoreString =
string
.Empty;
if
(!
string
.IsNullOrEmpty(filename))
XmlDocument
xDoc =
new
XmlDocument
();
XmlElement
xElem1;
XmlElement
)xDoc.SelectSingleNode(
"descendant::Expression[@Field='DataStore']"
);
if
(xElem1 !=
null
)
"Value"
);
return
dataStoreString;
http://blog.163.com/my_shuba/blog/static/690095092008111852923671/
随手写了一个小程序,发现WebClient返回数据特别慢,不知道是网站的原因还是本身的
原因。正好同事也在使用,就手工造了近8W多条数据保存到数据库中,然后用Aspx页面读出,WebClient(WinForm)返回后用
XmlDocument读取后显示在窗口中的DataGrid中。测试过程中发现,20多分钟还没有显示出界面。本以为是数据量太大造成数据库读取数据和
用WebClient返回有问题,但跟踪一下,返回数据不过十秒,而系统停在了XmlDocument中的节点形成DataTable的地方。
由于 程序是测试用,所以就随手写了以下代码
for( int i = 0; i < root.ChildNodes.Count; i ++ )
{
for( int j = 0; j < root.ChildNodes[i].ChildNodes.Count; j ++ )
{
;数据转换
}
}
发现竟然这个循环就20多分钟还没有完,10秒钟也就循环500多次
引用有问题?修改
int count = root.ChildNodes[0].ChildNodes.Count ;//数量肯定是一致的
for( int i = 0; i < root.ChildNodes.Count; i ++ )
{
XmlNode _node = root.ChildNodes[i] ;
for( int j = 0; j <count; j ++ )
{
;数据转换
}
}
不行,没有用。
把内层循环中的处理去说,保留一个空循环,测试,速度果然提高了不少,10秒钟循环了12000多次。
慢着,怎么会越来越慢?后来连3000次都不到了。难道每次根据节点取索引都从头找吗?
换个思路吧。
int count = root.ChildNodes[0].ChildNodes.Count ;//数据肯定是一致的
XmlNode _node = root.ChildNodes[0] ;
for( int i = 0; i < root.ChildNodes.Count; i ++ )
{
for( int j = 0; j <count; j ++ )
{
;数据转换
}
_node = _node.NextSibling ;
}
再测试,FT,竟然5秒都不到就完成了近8W次的数据转换。
哭笑不得啊!
看了一下定义,XmlNode.ChildNodes的类型为XmlChildNodes,不怕,看一下索引实现吧:
public override XmlNode
Item(int
i){ if (XmlNode
node1 = this.container
.FirstChild
; while (NextSibling
; XmlNode
Item(int
index){ if (list
.Count
) { this.ReadUntil
(list
.Count
) && (XmlNode
) this.list
[index
]; } return null;}
private ArrayList list;
说不上是它弱还是我弱,反正歪打正着,要不和真不知道效率是差在这个地方。平时用SelectNodes比较多,也从来没有做过这么大一个XmlDocument。
http://support.microsoft.com/kb/308333/zh-cn
本文演示如何使用 XPathNavigator
类通过 XML 路径语言 (XPath) 表达式查询 XPathDocument
对象。XPath 用于以编程方式计算表达式并选择文档中的特定节点。
回到顶端
下面的列表列出了推荐使用的硬件、软件、网络基础结构以及所需的服务包:
Visual C# .NET
本文假定您熟悉下列主题:
XML 术语
创建和读取 XML 文件
XPath 语法
回到顶端
在 Visual Studio .NET 中新建一个 Visual C# .NET 控制台应用程序。
备注
:
本示例使用名为 Books.xml 的文件。您可以创建自己的 Books.xml 文件,也可以使用 .NET 软件开发工具包 (SDK)
快速入门中包括的示例。如果您没有安装"快速入门"而且也不想安装它们,请参阅 Books.xml
下载位置的"参考"部分。如果已经安装了"快速入门",则该文件位于以下文件夹中:
Program Files/Microsoft.NET/FrameworkSDK/Samples/Quickstart/Howto/Samples/Xml/Transformxml/VB
必须将该文件复制到 /Bin/Debug 文件夹,该文件夹位于您在其中创建该项目的文件夹中。
确保该项目引用 System.Xml
名称空间。
在 Xml
和 XPath
名称空间上使用 using
语句,这样以后就不需要在代码中限定这些名称空间中的声明了。using
语句必须在所有其他声明之前使用,如下所示:
声明合适的变量。声明 XPathDocument
对象以保存 XML 文档,声明 XpathNavigator
对象以计算 XPath 表达式,声明 XPathNodeIterator
对象以迭代通过选定节点。声明 String
对象以保存 XPath 表达式。在 Class1 的 Main
函数中添加声明代码。
用示例文件 Books.xml 加载 XPathDocument
。XPathDocument
类使用可扩展样式表语言转换 (XSLT) 为 XML 文档处理提供快速和面向性能的缓存。它类似于 XML 文档对象模型 (DOM),但经过了高度优化,以用于 XSLT 处理和 XPath 数据模型。
从文档创建 XPathNavigator
。XPathNavigator
对象用于进行只读 XPath 查询。XPath 查询可返回结果值或许多节点。
创建 XPath 表达式以查找图书的平均价格。这个 XPath 表达式返回单个值。有关 XPath 语法的完整详细信息,请参见"参考"部分中的"XPath 语法"。
使用 XPathNavigator
对象的 Evaluate
方法计算 XPath 表达式。Evaluate
方法返回该表达式的结果。
创建 XPath 表达式以查找价格超过 10 美元的所有图书。这个 XPath 表达式只从 XML 源中返回 Title 节点。
为使用 XPathNavigator
的 Select
方法选择的节点创建 XPathNodeIterator
。XPathNodeIterator
表示 XPath 节点集,因此它支持针对该节点集执行的操作。
使用从 XPathNavigator
的 Select
方法返回的 XPathNodeIterator
遍历选定的节点。在这种情况下,可使用 XPathNodeIterator
的 MoveNext
方法迭代通过选定的所有节点。
使用 ReadLine
方法在控制台显示的末尾添加 pause,以便更容易地显示上述结果。
生成并运行您的项目。请注意,这些结果显示在控制台窗口中。
回到顶端
在测试代码时,您可能会收到以下异常错误信息:
An unhandled exception of type 'System.Xml.XmlException' occurred in System.xml.dll
Additional information:System error.
该异常错误发生在以下代码行上:
该异常错误是由无效的处理指令导致的。例如,处理指令可能包含多余的空格。下面是无效处理指令的示例:
若要解决该异常,请执行以下操作之一:
纠正无效的处理指令。下面是有效处理指令的示例:
- 或 -
下面是有效处理指令的示例:
从 Books.xml 文件中删除 XML 处理指令。
回到顶端
参考
loadTOCNode(1, 'references');
下列文件可从 Microsoft 下载中心下载:
收起这个图片
展开这个图片
立即下载 Books.xml
(http://download.microsoft.com/download/xml/utility/1.0.0.1/wxp/en-us/books.exe)
有关更多信息,请访问以下 Microsoft Web 站点:
.NET
中的 XML:.NET Framework XML Classes and C# Offer Simple, Scalable Data
Manipulation(.NET 中的 XML:.NET 框架 XML 类和 C# 提供简单的可缩放的数据操作)R/> http://msdn.microsoft.com/msdnmag/issues/01/01/xml/default.aspx
(http://msdn.microsoft.com/msdnmag/issues/01/01/xml/default.aspx)
XPathNavigator Class
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemXmlXPathXPathNavigatorClassTopic.asp
(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemXmlXPathXPathNavigatorClassTopic.asp)
XPathDocument Class(XPathDocument 类)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemXmlXPathXPathDocumentClassTopic.asp
(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemXmlXPathXPathDocumentClassTopic.asp)
XPathNodeIterator Class(XPathNodeIterator 类)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemXmlXPathXPathNodeIteratorClassTopic.asp
(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemXmlXPathXPathNodeIteratorClassTopic.asp)
XSLT Transformations with the XslTransform Class(使用 XslTransform 类 的 XSLT 转换)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconxslttransformationswithxsltransformclass.asp
(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconxslttransformationswithxsltransformclass.asp)
XPath Examples(XPath 示例)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk30/htm/xmrefxpathexamples.asp
(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk30/htm/xmrefxpathexamples.asp)
XPath Syntax(XPath 语法)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk30/htm/xmrefxpathsyntax.asp
(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk30/htm/xmrefxpathsyntax.asp)
有关 XPath 的更多信息,请访问下列 WWW 联合会 (W3C) Web 站点:
XML 路径语言 (XPath)
1.0 版:W3C 在 1999 年 11 月 16 日提出的建议
http://www.w3.org/TR/1999/REC-xpath-19991116
(http://www.w3.org/TR/1999/REC-xpath-19991116)
2007-06-08 17:55
下面这个xml
文件,要找的路径是"WTTData"Component"ComponentData"ComponentData"ObjectQueryBuilder 找属性field为datastore的expression节点的value值.
<WTTData>
<Component SetName="Explorers"
GroupName="JobExplorer">
<ComponentData Name="JobExplorer"
Version="2.2.2098.0">
<ComponentData Name="HorzSplitter"
Version="2.2.2098.0">
<Data Position="185" />
</ComponentData>
<ComponentData Name="VertSplitter"
Version="2.2.2098.0">
<Data Position="150" />
</ComponentData>
<ComponentData
Name="TabbedObjectTreeControl" Version="2.2.2098.0"
Visible="True">
<Data SelectedTreeNodePath="$"
CurrentTab="0" />
</ComponentData>
<ComponentData Name="ConfigurableListControl"
Version="2.2.2098.0">
<Column Name="" Width="32"
SortIndex="0" SortOrder="None" ColumnOrder="0" Default="True"
/>
<Column Name="Id" Width="70" SortIndex="-1"
SortOrder="None" ColumnOrder="1" Default="True" />
<Column
Name="Name" Width="352" SortIndex="-1" SortOrder="None" ColumnOrder="2"
Default="True" />
<Column Name="AssignedToAlias" Width="80"
SortIndex="-1" SortOrder="None" ColumnOrder="3" Default="True"
/>
<Column Name="FullPath" Width="190" SortIndex="-1"
SortOrder="None" ColumnOrder="4" Default="True" />
<Column
Name="LastUpdatedTime" Width="150" SortIndex="1" SortOrder="Descending"
ColumnOrder="5" Default="True" />
</ComponentData>
<ComponentData Name="QueryBuilder"
Version="2.2.2098.0" Visible="True">
<ObjectQueryBuilder
ControlType="Microsoft.DistributedAutomation.UI.QueryBuilder"
ControlAssembly="Microsoft.WTT.UI.Controls.ObjectControls" Assembly="WTTOMJobs"
Type="Microsoft.DistributedAutomation.Jobs.Job" Title="Job
Query">
<Expression Index="1" Static="True" AttachWith=""
Mapping="DataStore" Field="DataStore" Operator="Equals" Value="WTTMobile1"
/>
<Expression AttachWith="And" Mapping="Id" Field="ID"
Operator="Greater" Value="733454" />
<Expression
AttachWith="And" Mapping="Id" Field="ID" Operator="Less" Value="733740"
/>
</ObjectQueryBuilder>
</ComponentData>
<ComponentData Name="ToolBar"
Version="2.2.2098.0">
<Data
DefinitionController="WTTMobile1" HideQueryBuilder="True" HideHierarchy="True"
MaxItemsToDisplay="500" />
</ComponentData>
</ComponentData>
</Component>
<ActiveComponent
SetName="Explorers" GroupName="JobExplorer" />
</WTTData>
实现代码是:
{
{
xDoc.Load(filename);
xElem1 = (
{
dataStoreString = xElem1.GetAttribute(
}
}
}
1,定义一个XmlDocument对象xDoc
2,通过XmlDocument来load需要读取的xml文件
3,通过XmlDocument的SelectSingleNode来找到节点,并把节点转换为XmlElement
4,XmlElement
可以对节点的属性进行操作
注意两点:
1,
其中xDoc.SelectSingleNode("descendant::Expression[@Field='DataStore']"
);
SelectSingleNode参数里带有过滤条件,匹配公式是
descendant::nodename[@attribute='attributevalue']
2,xElem1 = (XmlElement
)xDoc.SelectSingleNode("descendant::Expression[@Field='DataStore']"
);把XmlNode强制转为XmlElement,理由是XmlElement是XmlNode的子类,前者比后者提供更多好用的方法,比如属性的读和写.XmlNode除了可以转为XmlAttribute.
static
public
string
getDataStore(
string
filename)
string
dataStoreString =
string
.Empty;
if
(!
string
.IsNullOrEmpty(filename))
XmlDocument
xDoc =
new
XmlDocument
();
XmlElement
xElem1;
XmlElement
)xDoc.SelectSingleNode(
"descendant::Expression[@Field='DataStore']"
);
if
(xElem1 !=
null
)
"Value"
);
return
dataStoreString;
http://blog.163.com/my_shuba/blog/static/690095092008111852923671/
随手写了一个小程序,发现WebClient返回数据特别慢,不知道是网站的原因还是本身的
原因。正好同事也在使用,就手工造了近8W多条数据保存到数据库中,然后用Aspx页面读出,WebClient(WinForm)返回后用
XmlDocument读取后显示在窗口中的DataGrid中。测试过程中发现,20多分钟还没有显示出界面。本以为是数据量太大造成数据库读取数据和
用WebClient返回有问题,但跟踪一下,返回数据不过十秒,而系统停在了XmlDocument中的节点形成DataTable的地方。
由于 程序是测试用,所以就随手写了以下代码
for( int i = 0; i < root.ChildNodes.Count; i ++ )
{
for( int j = 0; j < root.ChildNodes[i].ChildNodes.Count; j ++ )
{
;数据转换
}
}
发现竟然这个循环就20多分钟还没有完,10秒钟也就循环500多次
引用有问题?修改
int count = root.ChildNodes[0].ChildNodes.Count ;//数量肯定是一致的
for( int i = 0; i < root.ChildNodes.Count; i ++ )
{
XmlNode _node = root.ChildNodes[i] ;
for( int j = 0; j <count; j ++ )
{
;数据转换
}
}
不行,没有用。
把内层循环中的处理去说,保留一个空循环,测试,速度果然提高了不少,10秒钟循环了12000多次。
慢着,怎么会越来越慢?后来连3000次都不到了。难道每次根据节点取索引都从头找吗?
换个思路吧。
int count = root.ChildNodes[0].ChildNodes.Count ;//数据肯定是一致的
XmlNode _node = root.ChildNodes[0] ;
for( int i = 0; i < root.ChildNodes.Count; i ++ )
{
for( int j = 0; j <count; j ++ )
{
;数据转换
}
_node = _node.NextSibling ;
}
再测试,FT,竟然5秒都不到就完成了近8W次的数据转换。
哭笑不得啊!
看了一下定义,XmlNode.ChildNodes的类型为XmlChildNodes,不怕,看一下索引实现吧:
public override XmlNode
Item(int
i){ if (XmlNode
node1 = this.container
.FirstChild
; while (NextSibling
; XmlNode
Item(int
index){ if (list
.Count
) { this.ReadUntil
(list
.Count
) && (XmlNode
) this.list
[index
]; } return null;}
private ArrayList list;
说不上是它弱还是我弱,反正歪打正着,要不和真不知道效率是差在这个地方。平时用SelectNodes比较多,也从来没有做过这么大一个XmlDocument。
http://support.microsoft.com/kb/308333/zh-cn
本文演示如何使用 XPathNavigator
类通过 XML 路径语言 (XPath) 表达式查询 XPathDocument
对象。XPath 用于以编程方式计算表达式并选择文档中的特定节点。
回到顶端
要求
loadTOCNode(2, 'summary');下面的列表列出了推荐使用的硬件、软件、网络基础结构以及所需的服务包:
Visual C# .NET
本文假定您熟悉下列主题:
XML 术语
创建和读取 XML 文件
XPath 语法
回到顶端
如何用 XPath 表达式查询 XML
loadTOCNode(2, 'summary');在 Visual Studio .NET 中新建一个 Visual C# .NET 控制台应用程序。
备注
:
本示例使用名为 Books.xml 的文件。您可以创建自己的 Books.xml 文件,也可以使用 .NET 软件开发工具包 (SDK)
快速入门中包括的示例。如果您没有安装"快速入门"而且也不想安装它们,请参阅 Books.xml
下载位置的"参考"部分。如果已经安装了"快速入门",则该文件位于以下文件夹中:
Program Files/Microsoft.NET/FrameworkSDK/Samples/Quickstart/Howto/Samples/Xml/Transformxml/VB
必须将该文件复制到 /Bin/Debug 文件夹,该文件夹位于您在其中创建该项目的文件夹中。
确保该项目引用 System.Xml
名称空间。
在 Xml
和 XPath
名称空间上使用 using
语句,这样以后就不需要在代码中限定这些名称空间中的声明了。using
语句必须在所有其他声明之前使用,如下所示:
using System.Xml; using System.Xml.XPath;
声明合适的变量。声明 XPathDocument
对象以保存 XML 文档,声明 XpathNavigator
对象以计算 XPath 表达式,声明 XPathNodeIterator
对象以迭代通过选定节点。声明 String
对象以保存 XPath 表达式。在 Class1 的 Main
函数中添加声明代码。
XPathNavigator nav; XPathDocument docNav; XPathNodeIterator NodeIter; String strExpression;
用示例文件 Books.xml 加载 XPathDocument
。XPathDocument
类使用可扩展样式表语言转换 (XSLT) 为 XML 文档处理提供快速和面向性能的缓存。它类似于 XML 文档对象模型 (DOM),但经过了高度优化,以用于 XSLT 处理和 XPath 数据模型。
// Open the XML. docNav = new XPathDocument(@"c:/books.xml");
从文档创建 XPathNavigator
。XPathNavigator
对象用于进行只读 XPath 查询。XPath 查询可返回结果值或许多节点。
// Create a navigator to query with XPath. nav = docNav.CreateNavigator();
创建 XPath 表达式以查找图书的平均价格。这个 XPath 表达式返回单个值。有关 XPath 语法的完整详细信息,请参见"参考"部分中的"XPath 语法"。
// Find the average cost of a book. // This expression uses standard XPath syntax. strExpression = "sum(/bookstore/book/price) div count(/bookstore/book/price)";
使用 XPathNavigator
对象的 Evaluate
方法计算 XPath 表达式。Evaluate
方法返回该表达式的结果。
// Use the Evaluate method to return the evaluated expression. Console.WriteLine("The average cost of the books are {0}", nav.Evaluate(strExpression));
创建 XPath 表达式以查找价格超过 10 美元的所有图书。这个 XPath 表达式只从 XML 源中返回 Title 节点。
// Find the title of the books that are greater then $10.00. strExpression = "/bookstore/book/title[../price>10.00]";
为使用 XPathNavigator
的 Select
方法选择的节点创建 XPathNodeIterator
。XPathNodeIterator
表示 XPath 节点集,因此它支持针对该节点集执行的操作。
// Select the node and place the results in an iterator. NodeIter = nav.Select(strExpression);
使用从 XPathNavigator
的 Select
方法返回的 XPathNodeIterator
遍历选定的节点。在这种情况下,可使用 XPathNodeIterator
的 MoveNext
方法迭代通过选定的所有节点。
Console.WriteLine("List of expensive books:"); //Iterate through the results showing the element value. while (NodeIter.MoveNext()) { Console.WriteLine("Book Title:{0}", NodeIter.Current.Value); };
使用 ReadLine
方法在控制台显示的末尾添加 pause,以便更容易地显示上述结果。
//Pause Console.ReadLine();
生成并运行您的项目。请注意,这些结果显示在控制台窗口中。
回到顶端
疑难解答
loadTOCNode(2, 'summary');在测试代码时,您可能会收到以下异常错误信息:
An unhandled exception of type 'System.Xml.XmlException' occurred in System.xml.dll
Additional information:System error.
该异常错误发生在以下代码行上:
docNav = new XPathDocument("c://books.xml");
该异常错误是由无效的处理指令导致的。例如,处理指令可能包含多余的空格。下面是无效处理指令的示例:
<?xml version='1.0'?>
若要解决该异常,请执行以下操作之一:
纠正无效的处理指令。下面是有效处理指令的示例:
<?xml version='1.0'?>
- 或 -
下面是有效处理指令的示例:
从 Books.xml 文件中删除 XML 处理指令。
回到顶端
参考
下列文件可从 Microsoft 下载中心下载: 立即下载 Books.xml (http://download.microsoft.com/download/...
loadTOCNode(1, 'references');下列文件可从 Microsoft 下载中心下载:
收起这个图片
展开这个图片
立即下载 Books.xml
(http://download.microsoft.com/download/xml/utility/1.0.0.1/wxp/en-us/books.exe)
有关更多信息,请访问以下 Microsoft Web 站点:
.NET
中的 XML:.NET Framework XML Classes and C# Offer Simple, Scalable Data
Manipulation(.NET 中的 XML:.NET 框架 XML 类和 C# 提供简单的可缩放的数据操作)R/> http://msdn.microsoft.com/msdnmag/issues/01/01/xml/default.aspx
(http://msdn.microsoft.com/msdnmag/issues/01/01/xml/default.aspx)
XPathNavigator Class
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemXmlXPathXPathNavigatorClassTopic.asp
(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemXmlXPathXPathNavigatorClassTopic.asp)
XPathDocument Class(XPathDocument 类)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemXmlXPathXPathDocumentClassTopic.asp
(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemXmlXPathXPathDocumentClassTopic.asp)
XPathNodeIterator Class(XPathNodeIterator 类)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemXmlXPathXPathNodeIteratorClassTopic.asp
(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemXmlXPathXPathNodeIteratorClassTopic.asp)
XSLT Transformations with the XslTransform Class(使用 XslTransform 类 的 XSLT 转换)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconxslttransformationswithxsltransformclass.asp
(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconxslttransformationswithxsltransformclass.asp)
XPath Examples(XPath 示例)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk30/htm/xmrefxpathexamples.asp
(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk30/htm/xmrefxpathexamples.asp)
XPath Syntax(XPath 语法)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk30/htm/xmrefxpathsyntax.asp
(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk30/htm/xmrefxpathsyntax.asp)
有关 XPath 的更多信息,请访问下列 WWW 联合会 (W3C) Web 站点:
XML 路径语言 (XPath)
1.0 版:W3C 在 1999 年 11 月 16 日提出的建议
http://www.w3.org/TR/1999/REC-xpath-19991116
(http://www.w3.org/TR/1999/REC-xpath-19991116)
相关文章推荐
- C# 读取xml中特定节点的属性值 xmldocument方式 【有些乱,但有思路】
- C# 读取xml中特定节点的属性值 xmldocument方式
- c#读取xml中特定节点的值(实例)
- C#之Xml文件特定节点的读取
- C#读取XML(全部或根据某个节点的属性值)
- C#读取xml特定节点实例
- C#通过XML节点属性/属性值读取写入XML操作代码实例
- C# xml 读取 编辑保存 新增保存 查找是否存在特定节点
- [C#]已知某个XML节点的某个属性值,直接定位该节点
- c# 读取xml 某个节点值
- C#中怎样读取xml文件中节点的值
- C#下 读取xml节点的数据总结 .txt
- c# XML读取创建修改节点,子节点,和值
- C# 读取与修改xml一个节点的值
- C#读取XML节点内容方法实例简析(ZZ)
- C#下 读取xml节点的数据总结
- C#操作XML之——读取XML节点
- C#下 读取xml节点的数据总结 .txt
- Xml 搜索innerText或者某属性值为特定值的节点
- C#读取XML节点内容方法