XPATHS и пространства имен по умолчанию

В django имена групп захвата передаются вашему представлению в качестве аргументов ключевого слова.

Последовательности захвата (только скобки) передаются вашему представлению в качестве аргументов.

The? P - группа захваченных имен, в отличие от неназванной группы захвата.

http://docs.python.org/library/re.html

(?P...) Подобно обычным скобкам, но подстрока, соответствующая группе, доступна в остальном регулярном выражении через имя имени символической группы. Имена групп должны быть действительными идентификаторами Python, и каждое имя группы должно быть определено только один раз в регулярном выражении. Символическая группа также является нумерованной группой, как если бы группа не была названа. Таким образом, группа с именем id в приведенном ниже примере также может упоминаться как пронумерованная группа 1.

blockquote>

16
задан Wayne Burkett 20 December 2011 в 18:58
поделиться

4 ответа

Я попробовал что-то подобное тому, какой предложенный palehorse и не мог заставить его работать. Так как я получал данные из опубликованного сервиса, я не мог изменить xml. Я закончил тем, что использовал XmlDocument и XmlNamespaceManager как так:

XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlWithBogusNamespace);            
XmlNamespaceManager nSpace = new XmlNamespaceManager(doc.NameTable);
nSpace.AddNamespace("myNs", "http://theirUri");

XmlNodeList nodes = doc.SelectNodes("//myNs:NodesIWant",nSpace);
//etc
10
ответ дан Walery Strauch 20 December 2011 в 18:58
поделиться

Вам нужно локальное имя ():

http://www.w3.org/TR/xpath#function-local-name

Для закрепления от http://jcooney.net/archive/2005/08/09/6517.aspx :

<foo xmlns='urn:foo'>
  <bar>
    <asdf/>
  </bar>            
</foo>

Это выражение будет соответствовать элементу “bar”:

  //*[local-name()='bar'] 

Этот не будет:

 //bar
15
ответ дан Aurélien Mino 20 December 2011 в 18:58
поделиться

Проблема - то, что элемент без пространства имен, как объявляют, находится в ПУСТОМ пространстве имен - поэтому, если бы//нечто соответствовало против пространства имен, Вы считаете 'значением по умолчанию' не было бы никакого способа относиться к элементу в пустом пространстве имен.

Помнят также, что префикс для пространства имен является только соглашением стенографии, реальное имя элемента (Полностью определенное имя или QName, если коротко) состоит из полного пространства имен и локального имени. Изменение префикса для пространства имен не изменяет 'идентификационные данные' элемента - если это находится в том же пространстве имен и том же локальном имени тогда, это - тот же вид элемента, даже если префикс отличается.

XPath 2.0 (или скорее XSLT 2.0) имеет понятие 'значения по умолчанию xpath пространство имен'. Можно установить атрибут xpath-пространства-имен-по-умолчанию на xsl:stylesheet элементе.

4
ответ дан samjudson 20 December 2011 в 18:58
поделиться

При попытке использовать xslt, можно включить пространство имен к объявлению таблицы стилей. Если Вы делаете это, необходимо удостовериться, что существует префикс, или он не будет работать. Если источник, XML не имеет префикса, который прекрасен все еще, Вы добавляете свой собственный префикс в таблице стилей.

Таблица стилей

<xsl:stylesheet
    xmlns:fb="uri"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

    <xsl:template match="fb:foo/bar">
        <!--  do stuff here -->
    </xsl:template>
</xsl:stylsheet>

Или что-то как этот.

0
ответ дан David Newcomb 20 December 2011 в 18:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: