Я изо всех сил пытаюсь вернуть XMLNodeList элементов строки в элементе TableRows файла RDLC.Есть много примеров использования пространств имен, но я попробовал их все и не могу получить какие-либо узлы из моего запроса XPath, хотя, честно говоря, я не очень понимаю пространства имен по умолчанию / пространства имен и т. Д. Я проверил свойство Пространства имен по умолчанию в quickwatch, и он говоритего "" ??хотя я не знаю, почему или как установить его как доступное только для чтения.
я определил мои пространства имен с помощью:
Dim doc As XmlDocument = New XmlDocument()
doc.Load(fname)
Dim root As XmlNode = doc.DocumentElement
Dim nsmgr As New XmlNamespaceManager(doc.NameTable)
nsmgr.AddNamespace("rd", "http://schemas.microsoft.com/SQLServer/reporting/reportdesigner")
nsmgr.AddNamespace("pf", "http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition")
затем в коде, где я хочу что-то сделать со строками, которые япередайте lst как XmlNode и выполните:
' FIRST FIND THE <TableRows> NODE, UNDER MY CURRENT <Header> ELEMENT
Dim TableRowsNode As XmlNode = lst.Item("TableRows") ' where lst is the <Header> element of the table in the rdlc i want to process
' GET ALL THE ROWS WITHIN THE <TABLEROWS> NODE
Dim Rows As XmlNodeList = TableRowsNode.SelectNodes("//rd:TableRow", ns) ' where ns is the above nsmgr
' FOR EACH ROW
For Each TableRow As XmlNode In Rows
' GET ALL THE CELLS
Dim TableCells As XmlNode = TableRow.Item("TableCells")
' FOR EACH CELL
For Each TableCell As XmlNode In TableCells
Dim ReportItems As XmlNode = TableCell.Item("ReportItems")
For Each ReportItem As XmlNode In ReportItems
Select Case ReportItem.Name
Case "Textbox"
txt_lst.Add(ReportItem)
Case "Image"
img_lst.Add(ReportItem)
End Select
Next ' each report item
Next ' each cell
Next ' each row
ive попробовал "./TableRow"
" // TableRow "
" .//TableRows"
"// rd: TableRow"
"// pf: TableRow"
и множество других вариантов, но строка TableRowsNode.SelectNodes (..) никогда не возвращает никаких результатов (count = 0)
что я делаю неправильно?
вот несколько фрагментов соответствующих разделов rdlc im loading:
<?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">
и раздела, который меня интересует ...
<Table Name="table2">
.....
<Header>
<TableRows>
<TableRow>
....
</TableRow>
<TableRow>
.....
</TableRow>
</TableRows>
iхочу NodeList элементов «TableRow», чтобы я мог генерировать список изображений, текстовых полей и т. д., с которыми я буду обрабатывать и вообще что-то делать (для тех, кто интересуется, генерированием изображений математических символов, заменой строк ресурсов на связанный с ними текст и т. д.)...
Я занимался этим слишком долго, и должно быть что-тоng глупо просто im отсутствует, так как все поиски приводят к одному и тому же пространству имен решения, а строка запроса xpath ...
, пожалуйста, помогите.
Edit: получил запрос xpathвроде как работать с "// pf: TableRow", но он возвращал все узлы из всего документа, поэтому я сдался и просто использовал
Dim Rows As XmlNodeList = TableRowsNode.ChildNodes
Edit: , видимо, "// "делает поиск с верхнего уровня документа, но я не могу получить" .//pf:TableRow ", чтобы вернуть только те совпадающие узлы под текущим?Я вернусь к этому позже, когда у меня будет больше времени.