我有以下XML:
<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40">
<Names>
<NamedRange ss:Name="SomeNamedRange" ss:RefersTo="=Control!R1C1:R51C4"/>
</Names>
<Worksheet ss:Name="Control" ss:Protected="1">
<Table ss:ExpandedColumnCount="4" ss:ExpandedRowCount="51">
<Row>
<Cell ss:StyleID="s145">
<Comment ss:Author="Some comment here">
<ss:Data xmlns="http://www.w3.org/TR/REC-html40"></ss:Data>
</Comment>
</Cell>
</Row>
</Table>
</Worksheet>
</Workbook>
我想用XPath获得Names
元素,所以我尝试:
//Names
但是这不起作用。到目前为止,我已经找到了解决此问题的多种方法。
//ss:Names
//*:Names
//*[local-name()='Names']
OR,我可以删除以下元素:
<ss:Data xmlns="http://www.w3.org/TR/REC-html40"></ss:Data>
很显然,这与名称空间有关,但我仍然不太了解发生了什么。所以我有两个问题:
ss:Data
元素会影响能够读取Names
元素?Names
元素被认为在ss
命名空间中(当ss:Data
元素存在时?)]][最终,我打算用C#读取此XML,但是到目前为止,我已经在各种在线XPath网站(例如http://xpather.com/)上执行了所有上述操作。
我具有以下XML:[[[]]
您应该感到困惑。
仅删除ss:Data
不会导致//Names
声明Names
的默认名称空间时Workbook
突然选择Workbook
的urn:schemas-microsoft-com:office:spreadsheet
子级。您似乎偶然发现了xpather.com中的错误。请注意,它们的默认XML具有以下关于名称空间的免责声明: