bir sorgu sonucu nasıl sorgulanır Ben bir temel şey Saxon HE 9.7 xquery ile yapmaya çalışıyorum. Bir dizi öğe döndüren bir sorgu var. Sonra her bir elemanı ayrı ayrı sorgulamak istiyorum. Ama sadece bu eleman üzerinde nasıl bir sorgu yapılacağını anlayamıyorum. setContextItem()
numaranın işe yarayacağını düşündüm ama işe yaramadı.Sakson xquery
Sorunumu gösteren basit bir örnek oluşturdum. <element>
üzerinden döngü yapıyorum ve daha sonra her öğe için <name>
'u almak istiyorum. Ama benim sorgum hiçbir şey vermiyor, çünkü sadece xml değil, sadece elementi sorgulıyor. İç sorguyu //name
olarak değiştirirseniz, belgedeki tüm ad etiketlerini döndürür.
Dosya verileri/example.xml:
<root>
<element>
<name>1</name>
</element>
<element>
<name>2</name>
</element>
</root>
Java kodu:
public static void main(String[] args) throws SaxonApiException
{
Processor proc = new Processor(false);
XPathCompiler xpath = proc.newXPathCompiler();
DocumentBuilder builder = proc.newDocumentBuilder();
XdmNode rootNode = builder.build(new File("data/example.xml"));
String xquery = "/root/element";
XPathSelector selector = xpath.compile(xquery).load();
selector.setContextItem(rootNode);
for (XdmItem item : selector)
{
xquery = "/element/name";
XPathSelector selector2 = xpath.compile(xquery).load();
selector2.setContextItem(item);
System.out.println("item=" + item);
if (selector2.iterator().hasNext())
System.out.println("name=" + selector2.iterator().next());
else
System.out.println("Not found");
}
}
Benim Maven bağımlılık:
<dependency>
<groupId>net.sf.saxon</groupId>
<artifactId>Saxon-HE</artifactId>
<version>9.7.0-4</version>
</dependency>
Sonuç:
item=<element>
<name>1</name>
</element>
Not found
item=<element>
<name>2</name>
</element>
Not found