Синтаксис справки по запросам XPath - PullRequest
0 голосов
/ 04 мая 2011

У меня возникли трудности с выражением xPath.

Контекст: я использую документ XML для хранения запросов / имен хранимых процедур в приложении ASP.Я использую служебную функцию для загрузки xmldocument (если он не был загружен ранее) и пытаюсь выбрать набор документов из документа, который соответствует элементу Id.Вот мой документ XML:

<Queries>
  <Id>USER001
    <Sql>spUsers_GetUserByUserName</Sql>
  </Id >
  <Id <USER002
    <Sql>spUsers_GetUserByEmail</Sql>
</Queries>

Вот код (я использую VB.NET)

Module Utility

private sqlXml as xmldocument

'....other stuff.....


Public Function GetSql(queryId as string) as string

dim qry as string
dim node as XmlNode

if sqlXml is nothing then
   sqlXml = new xmldocument
   sqlXml.Load (..path)
end if 

qry = "//Id['" & queryId  & "']"    'xPath to select the Id node = to paramter passed

node = sqlxml.SelectSingleNode(qry) 'set node <Id><Sql></Sql></Id>

return node.SelectSingleNode("//Sql").InnerText 'Return the Sql element value from the Id

End Function

Проблема:

переменная узла только возвращаетпервый элемент.Я проверил, что строка qry, которая используется для SelectSingleNode, является правильным значением Id (т. Е. USER002) - однако узел загружается с элементом USER001.Это явно выражение xPath, которое испортилось.Что мне нужно настроить для выражения xPath, чтобы я мог вернуть правильный элемент <Id> и соответствующий дочерний элемент <Sql>.

Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 05 мая 2011

Похоже, вы пытаетесь создать выражение, как //Id['USER002']. Это выберет все элементы E, для которых действительное логическое значение «USER002» истинно - и это все из них. Непонятно, что вы намеревались, потому что ваш пример XML беспорядок, но это должно быть что-то вроде //Id[@id='USER002']

Кроме того, вам не следует создавать выражения XPath путем конкатенации строк. Это оставляет вас подверженными инъекционным атакам и случайным сбоям в работе, когда кто-то предоставляет строку, содержащую кавычки. Это также неэффективно. Создайте строку, содержащую ссылку на переменную $ param, и установите параметр из API. (Боюсь, я не знаю, как это сделать в VB).

0 голосов
/ 04 мая 2011

Google XML COOKTOP и установите его. Это отличное небольшое бесплатное приложение для проверки выражений XPATH и XSLT в файлах данных XML и просмотра результатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...