Технически нет прямого способа сделать это, однако вы можете сортировать это с помощью jquery или javascript.
Howeve, вы также можете сделать что-то подобное.
a.active h1 {color:blue;}
a.active p {color: green;}
jQuery
$("a.active").parents('li').css("property", "value");
Если вы хотите достичь этого с помощью jQuery, здесь приведена ссылка для родительского селектора jQuery
У самого XPath нет способа связать префикс пространства имен с пространством имен. Такие средства предоставляются библиотекой хостинга.
Рекомендуется использовать эти средства и определять префиксы пространства имен, которые затем могут использоваться для квалифицирования XML-элементов и имен атрибутов по мере необходимости.
Вот некоторые из различных механизмов, которые хосты XPath предоставляют для указания привязок префикса пространства имен к URI пространства имен:
XSLT:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:i="http://schema.intuit.com/finance/v3">
...
Perl ( LibXML ):
my $xc = XML::LibXML::XPathContext->new($doc);
$xc->registerNs('i', 'http://schema.intuit.com/finance/v3');
my @nodes = $xc->findnodes('/i:IntuitResponse/i:QueryResponse');
Python ( lxml ):
from lxml import etree
f = StringIO('<IntuitResponse>...</IntuitResponse>')
doc = etree.parse(f)
r = doc.xpath('/i:IntuitResponse/i:QueryResponse',
namespaces={'i':'http://schema.intuit.com/finance/v3'})
Python ( ElementTree ):
namespaces = {'i': 'http://schema.intuit.com/finance/v3'}
root.findall('/i:IntuitResponse/i:QueryResponse', namespaces)
Java (SAX):
NamespaceSupport support = new NamespaceSupport();
support.pushContext();
support.declarePrefix("i", "http://schema.intuit.com/finance/v3");
Java (XPath):
xpath.setNamespaceContext(new NamespaceContext() {
public String getNamespaceURI(String prefix) {
switch (prefix) {
case "i": return "http://schema.intuit.com/finance/v3";
// ...
}
});
DocumentBuilderFactory.setNamespaceAware(true)
.C #:
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("i", "http://schema.intuit.com/finance/v3");
XmlNodeList nodes = el.SelectNodes(@"/i:IntuitResponse/i:QueryResponse", nsmgr);
xmlstarlet:
-N i="http://schema.intuit.com/finance/v3"
JavaScript:
См. Реализация разрешенного пользователем пространства имен Resolver :
function nsResolver(prefix) {
var ns = {
'i' : 'http://schema.intuit.com/finance/v3'
};
return ns[prefix] || null;
}
document.evaluate( '/i:IntuitResponse/i:QueryResponse',
document, nsResolver, XPathResult.ANY_TYPE,
null );
PhP :
Адаптировано из @ ответа Томалака с использованием DOMDocument :
$result = new DOMDocument();
$result->loadXML($xml);
$xpath = new DOMXpath($result);
$xpath->registerNamespace("i", "http://schema.intuit.com/finance/v3");
$result = $xpath->query("/i:IntuitResponse/i:QueryResponse");
См. также @ Канонический Q / A IMSoP на PHP Пространства имен SimpleXML .
VBA:
xmlNS = "xmlns:i='http://schema.intuit.com/finance/v3'"
doc.setProperty "SelectionNamespaces", xmlNS
Set queryResponseElement =doc.SelectSingleNode("/i:IntuitResponse/i:QueryResponse")
Как только вы объявили префикс пространства имен, ваш XPath можно записать, чтобы использовать его:
/i:IntuitResponse/i:QueryResponse
Альтернативой является запись предикатов, которые проверяют на local-name()
:
/*[local-name()='IntuitResponse']/*[local-name()='QueryResponse']/@startPosition
Или, в XPath 2.0:
/*:IntuitResponse/*:QueryResponse/@startPosition
Пространство имен в этом стиле работает, но не рекомендуется, потому что оно
/*[ namespace-uri()='http://schema.intuit.com/finance/v3'
and local-name()='IntuitResponse']
/*[ namespace-uri()='http://schema.intuit.com/finance/v3'
and local-name()='QueryResponse']
/@startPosition
1Подается Даниэль Хейли для примечания namespace-uri()
.
/IntuitResponse/QueryResponse/Bill/Id
без регистрации пространства имен, pugi / javax извлекает all i>Id
s в документе. – Adam 25 November 2016 в 20:02setNamespaceAware(true)
наDocumentBuilderFactory
. – kjhughes 25 November 2016 в 20:56