-
September 10th, 2008, 05:28 PM
#1
How can we write case insensitive queries for Xpath xml parsing
Please follow the given xml code below.
Consider a xml file with parameter and values like
<Book>
<Name>ABC</NAME>
<Value>123</Value>
</Book>
<book>
<Name>EFG</Name>
<Value>456</Value>
</book>
<bOOK>
<Name>XYZ</Name>
<Value>789</Name>
</bOOK>
In Java,
How can we write a single Xpath query to parse all the book blocks in single expression though they are in different case(Upper case/Lowercase).
Please let me know if anybody can help me with this.
Regards,
Vijay
-
September 10th, 2008, 07:16 PM
#2
Re: How can we write case insensitive queries for Xpath xml parsing
XPath is used to query well formed XML documents. Your XML isn't well formed, so I'm not sure you can use XPath here.
- petter
-
September 10th, 2008, 07:25 PM
#3
Re: How can we write case insensitive queries for Xpath xml parsing
Please note: Updating the xml code correctly
<config>
<Book>
<Name>ABC</Name>
<Value>123</Value>
</Book>
<book>
<Name>EFG</Name>
<Value>456</Value>
</book>
<bOOK>
<Name>XYZ</Name>
<Value>789</Value>
</bOOK>
</config>
Regards,
Vijay
-
September 11th, 2008, 08:21 AM
#4
Re: How can we write case insensitive queries for Xpath xml parsing
Assuming the XML is well-formed, this expression will find all nodes whose lowercase name is 'book':
//.[lower-case(name())='book']
The key to performance is elegance, not batallions of special cases...
J. Bently & D. McIlroy
Please use [CODE]...your code here...[/CODE] tags when posting code. If you get an error, please post the full error message and stack trace, if present.
-
September 11th, 2008, 11:46 AM
#5
Re: How can we write case insensitive queries for Xpath xml parsing
Please see the result of the modification, I am getting some errors, What might be the cause
XPathExpression bookexp = xpath.compile("//[lower-case(name())='book']/Name/text()");
Object obj = bookexp.evaluate(doc, XPathConstants.NODESET);
Output:
Exception in thread "main" javax.xml.transform.TransformerException: A location step was expected following the '/' or '//' token.
at com.sun.org.apache.xpath.internal.compiler.XPathParser.error(Unknown Source)
at com.sun.org.apache.xpath.internal.compiler.XPathParser.Step(Unknown Source)
at com.sun.org.apache.xpath.internal.compiler.XPathParser.RelativeLocationPath(Unknown Source)
at com.sun.org.apache.xpath.internal.compiler.XPathParser.LocationPath(Unknown Source)
at com.sun.org.apache.xpath.internal.compiler.XPathParser.PathExpr(Unknown Source)
at com.sun.org.apache.xpath.internal.compiler.XPathParser.UnionExpr(Unknown Source)
at com.sun.org.apache.xpath.internal.compiler.XPathParser.UnaryExpr(Unknown Source)
at com.sun.org.apache.xpath.internal.compiler.XPathParser.MultiplicativeExpr(Unknown Source)
at com.sun.org.apache.xpath.internal.compiler.XPathParser.AdditiveExpr(Unknown Source)
at com.sun.org.apache.xpath.internal.compiler.XPathParser.RelationalExpr(Unknown Source)
at com.sun.org.apache.xpath.internal.compiler.XPathParser.EqualityExpr(Unknown Source)
at com.sun.org.apache.xpath.internal.compiler.XPathParser.AndExpr(Unknown Source)
at com.sun.org.apache.xpath.internal.compiler.XPathParser.OrExpr(Unknown Source)
at com.sun.org.apache.xpath.internal.compiler.XPathParser.Expr(Unknown Source)
at com.sun.org.apache.xpath.internal.compiler.XPathParser.initXPath(Unknown Source)
at com.sun.org.apache.xpath.internal.XPath.<init>(Unknown Source)
at com.sun.org.apache.xpath.internal.XPath.<init>(Unknown Source)
at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.compile(Unknown Source)
at Gts.query(Gts.java:38)
at Gts.main(Gts.java:46)
-
September 12th, 2008, 04:04 AM
#6
Re: How can we write case insensitive queries for Xpath xml parsing
You didn't copy the expression I posted. Look again (or just copy & paste).
Everything should be made as simple as possible, but not simpler...
A. Einstein
Please use [CODE]...your code here...[/CODE] tags when posting code. If you get an error, please post the full error message and stack trace, if present.
-
September 14th, 2008, 11:51 AM
#7
Re: How can we write case insensitive queries for Xpath xml parsing
Hi...
Please see the result of the expression posted by you.
bookexp = xpath.compile("//.[lower-case(name())='book']");
Object obj = bookexp.evaluate(doc, XPathConstants.NODESET);
Please view the full code.
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class Gts {
public void query() throws ParserConfigurationException, SAXException,
IOException, XPathExpressionException {
// Standard of reading a XML file
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder;
Document doc = null;
//Expression variables to check xml parameters
XPathExpression bookexp = null; // Expression to parse global parameters names
XPathFactory xFactory = XPathFactory.newInstance();
// Create a XPath object
XPath xpath = xFactory.newXPath();
// Compile the XPath expression
builder = factory.newDocumentBuilder();
doc = builder.parse("c:/book.xml");
bookexp = xpath.compile("//.[lower-case(name())='book']");
Object obj = bookexp.evaluate(doc, XPathConstants.NODESET);
NodeList n = (NodeList) obj;
for (int i=0; i<n.getLength(); i++)
System.out.println(n.item(i).getNodeValue());
}
public static void main(String[] args) throws XPathExpressionException, ParserConfigurationException, SAXException, IOException {
Gts g = new Gts();
g.query();
}
}
Please let me know if any modifications.
Output:
Exception in thread "main" javax.xml.transform.TransformerException: '..[predicate]' or '.[predicate]' is illegal syntax. Use 'self::node()[predicate]' instead.
at com.sun.org.apache.xpath.internal.compiler.XPathParser.error(Unknown Source)
at com.sun.org.apache.xpath.internal.compiler.XPathParser.Step(Unknown Source)
at com.sun.org.apache.xpath.internal.compiler.XPathParser.RelativeLocationPath(Unknown Source)
at com.sun.org.apache.xpath.internal.compiler.XPathParser.LocationPath(Unknown Source)
at com.sun.org.apache.xpath.internal.compiler.XPathParser.PathExpr(Unknown Source)
at com.sun.org.apache.xpath.internal.compiler.XPathParser.UnionExpr(Unknown Source)
at com.sun.org.apache.xpath.internal.compiler.XPathParser.UnaryExpr(Unknown Source)
at com.sun.org.apache.xpath.internal.compiler.XPathParser.MultiplicativeExpr(Unknown Source)
at com.sun.org.apache.xpath.internal.compiler.XPathParser.AdditiveExpr(Unknown Source)
at com.sun.org.apache.xpath.internal.compiler.XPathParser.RelationalExpr(Unknown Source)
at com.sun.org.apache.xpath.internal.compiler.XPathParser.EqualityExpr(Unknown Source)
at com.sun.org.apache.xpath.internal.compiler.XPathParser.AndExpr(Unknown Source)
at com.sun.org.apache.xpath.internal.compiler.XPathParser.OrExpr(Unknown Source)
at com.sun.org.apache.xpath.internal.compiler.XPathParser.Expr(Unknown Source)
at com.sun.org.apache.xpath.internal.compiler.XPathParser.initXPath(Unknown Source)
at com.sun.org.apache.xpath.internal.XPath.<init>(Unknown Source)
at com.sun.org.apache.xpath.internal.XPath.<init>(Unknown Source)
at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.compile(Unknown Source)
at Gts.query(Gts.java:38)
at Gts.main(Gts.java:46)
-
September 15th, 2008, 03:44 AM
#8
Re: How can we write case insensitive queries for Xpath xml parsing
The expression worked fine for me on the sample XML you provided. If it doesn't work for you, why not try the suggestion in the error message?
The purpose of computing is insight, not numbers...
R. Hamming
Please use [CODE]...your code here...[/CODE] tags when posting code. If you get an error, please post the full error message and stack trace, if present.
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|