首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么XmlDocument有一个没有声明的名称空间(AFAIK)?

为什么XmlDocument有一个没有声明的名称空间(AFAIK)?
EN

Stack Overflow用户
提问于 2013-09-18 09:26:35
回答 1查看 190关注 0票数 0

问题:

我正在使用System.Xml.XmlDocument和XPath查询,从Microsoft报告中提取信息。

我有以下两个XML文件。

如果我想检查第二个文件是否有一个带有name属性= London的(geoname)条目,我可以使用以下XPath查询:

代码语言:javascript
运行
复制
/geonames/geoname[1]/name[text()="London"]

另一方面,如果我想检查报表是否有一个名为ReportParameter的in_sprache,我希望可以使用这个XPath查询:

代码语言:javascript
运行
复制
/Report/ReportParameters/ReportParameter[@Name="in_sprache"]

然而,这是行不通的。

因此,我使用XMLQuire检查了所需的XPath,它告诉我geoname也是这样,但是对于报告,它告诉我XPath是这样的:

代码语言:javascript
运行
复制
/dft:Report/dft:ReportParameters/dft:ReportParameter[@Name="in_sprache"]

现在XMLQuire是正确的,这个XPath确实工作(在名称空间管理器中声明dft之后)。

然而,我不明白的是为什么我的不工作?

据我所见,没有名称空间dft (=default??)定义在任何地方。

然而XMLQuire发现了它,所以它一定在某个地方。

那么,为什么报告有(要求)一个dft命名空间,而第二个名称空间没有?

我只看到一个rd命名空间声明..。

Microsoft Reporting报告:

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="utf-8"?>
<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
<DataSources>
<DataSource Name="COR_Basic">
<rd:DataSourceID>addde073-f37c-4b59-ae3a-25231ffc0ec6</rd:DataSourceID>
<DataSourceReference>COR_Basic</DataSourceReference>
</DataSource>
</DataSources>
<InteractiveHeight>29.7cm</InteractiveHeight>
<ReportParameters>
<ReportParameter Name="in_mandant">
<DataType>String</DataType>
<DefaultValue>
<Values>
<Value>0</Value>
</Values>
</DefaultValue>
<Prompt>Mandant</Prompt>
<Hidden>true</Hidden>
</ReportParameter>
<ReportParameter Name="in_sprache">
<DataType>String</DataType>
<DefaultValue>
<Values>
<Value>de</Value>
</Values>
</DefaultValue>
<Prompt>in_sprache</Prompt>
<Hidden>true</Hidden>
</ReportParameter>
<ReportParameter Name="in_standort">
<DataType>String</DataType>
<DefaultValue>
<DataSetReference>
<DataSetName>SEL_Standort</DataSetName>
<ValueField>RPT_UID</ValueField>
</DataSetReference>
</DefaultValue>
<Prompt>Standort</Prompt>
<ValidValues>
<DataSetReference>
<DataSetName>SEL_Standort</DataSetName>
<ValueField>RPT_UID</ValueField>
<LabelField>RPT_Name</LabelField>
</DataSetReference>
</ValidValues>
</ReportParameter>

第二个文件是

任意XML文件(地理名称):

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<geonames style="MEDIUM">
<totalResultsCount>6987</totalResultsCount>
<geoname>
<name>London</name>
<lat>51.5084152563931</lat>
<lng>-0.125532746315002</lng>
<geonameId>2643743</geonameId>
<countryCode>GB</countryCode>
<countryName>United Kingdom</countryName>

<fcl>P</fcl>
<fcode>PPLC</fcode>
</geoname>
<geoname>
<name>London</name>
<lat>42.983389283</lat>
<lng>-81.233042387</lng>
<geonameId>6058560</geonameId>
<countryCode>CA</countryCode>
<countryName>Canada</countryName>

<fcl>P</fcl>
<fcode>PPL</fcode>
</geoname>
<geoname>
<name>East London</name>
<lat>-33.0152850934643</lat>
<lng>27.9116249084473</lng>
<geonameId>1006984</geonameId>
<countryCode>ZA</countryCode>
<countryName>South Africa</countryName>

<fcl>P</fcl>
<fcode>PPL</fcode>
</geoname>
<geoname>
<name>City</name>
<lat>51.5133363996235</lat>
<lng>-0.0890064239501953</lng>
<geonameId>2643744</geonameId>
<countryCode>GB</countryCode>
<countryName>United Kingdom</countryName>

<fcl>A</fcl>
<fcode>ADM2</fcode>
</geoname>
<geoname>
<name>London</name>
<lat>37.1289771</lat>
<lng>-84.0832646</lng>
<geonameId>4298960</geonameId>
<countryCode>US</countryCode>
<countryName>United States</countryName>

<fcl>P</fcl>
<fcode>PPL</fcode>
</geoname>
<geoname>
<name>The Tower of London</name>
<lat>51.5082349601834</lat>
<lng>-0.0763034820556641</lng>
<geonameId>6286786</geonameId>
<countryCode>GB</countryCode>
<countryName>United Kingdom</countryName>

<fcl>S</fcl>
<fcode>CSTL</fcode>
</geoname>
<geoname>
<name>London Reefs</name>
<lat>8.85</lat>
<lng>112.5333333</lng>
<geonameId>1879967</geonameId>
<countryCode>  </countryCode>
<countryName>  </countryName>

<fcl>U</fcl>
<fcode>RFSU</fcode>
</geoname>
<geoname>
<name>Greater London</name>
<lat>51.5</lat>
<lng>-0.1666667</lng>
<geonameId>2648110</geonameId>
<countryCode>GB</countryCode>
<countryName>United Kingdom</countryName>

<fcl>A</fcl>
<fcode>ADM2</fcode>
</geoname>
<geoname>
<name>London</name>
<lat>46.1666667</lat>
<lng>6.0166667</lng>
<geonameId>2661811</geonameId>
<countryCode>CH</countryCode>
<countryName>Switzerland</countryName>

<fcl>H</fcl>
<fcode>STM</fcode>
</geoname>
<geoname>
<name>London Borough of Islington</name>
<lat>51.5333333</lat>
<lng>-0.1333333</lng>
<geonameId>3333156</geonameId>
<countryCode>GB</countryCode>
<countryName>United Kingdom</countryName>

<fcl>A</fcl>
<fcode>ADM2</fcode>
</geoname>
</geonames>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-18 09:31:14

名称空间使用特殊的xmlns“属性”定义。根元素上定义了两个名称空间,其中一个声明其前缀(rd),另一个没有。后者是节点的所有后代的默认命名空间,如果没有以其他方式声明的话。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18868501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档