<?xml version="1.0" encoding="utf-8"?>
<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
<Body>
...more stuff...
<Textbox Name="Textbox93">
<CanGrow>true</CanGrow>
<KeepTogether>true</KeepTogether>
<Paragraphs>
<Paragraph>
<TextRuns>
<TextRun>
<Value rd:TranslationKey="DATE">Date</Value>
<Style>
<FontSize>11pt</FontSize>
<FontWeight>Bold</FontWeight>
<Color>#444444</Color>
</Style>
</TextRun>
</TextRuns>
<Style />
</Paragraph>
</Paragraphs>
<rd:DefaultName>Textbox93</rd:DefaultName>
<Style>
<Border>
<Color>LightGrey</Color>
<Style>Solid</Style>
</Border>
<BackgroundColor>#82bad9</BackgroundColor>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
</Textbox>
这是较大的xml文档中的重复结构。我试图像这样拉出每个节点:<Value rd:LocId="DATE_VALUE">Date</Value>
。我试图像这样检索节点:
var nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("nm", "http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition");
nsmgr.AddNamespace("rd", "http://schemas.microsoft.com/SQLServer/reporting/reportdesigner");
var nodes = doc.DocumentElement.SelectNodes("//Value[@rd:TranslationKey]", nsmgr);
我的节点数是0,我不知道为什么。这看起来像我在网上看到的例子。
答案 0 :(得分:3)
哦不,不再是XML命名空间了!
当XML文档中有一个名称空间时,即使它是默认名称空间,所有节点名称(以及查询)都需要以该名称空间为前缀。
因此,如果您在Value
前加上nm:
,则代码应该可以正常运行,如下所示:
var nodes = doc.DocumentElement.SelectNodes("//nm:Value[@rd:TranslationKey]", nsmgr);