Gabriel (archive)
Usenet Archive
- Joined
- Sep 26, 2000
- Messages
- 149
- Reaction score
- 0
Greetings, After 6 hours of fruitless research, I ask for your help !
I have an svg file and use Saxon latest implementation, openSource version.
it holds nodes whose path are :
svg/g[@id='textes_x0020_et_x0020_puces']/g/text
each text node possess a transform attribute that I want to work with.
The problem is that whatever xPath expression I use, I never fetch any nodes. According to the samples, it works with regular xml but doesn't with svg (which is xml !). But well, it just doesn't
I tried to get svg width attributes as well but nope
After a lot of research it happenedn that sxon does not know about the svg namespace. How can I tell him to be aware of it ??
Any ideas ?
The code :
import net.sf.saxon.xpath.XPathEvaluator;
import net.sf.saxon.xpath.XPathExpression;
import net.sf.saxon.xpath.StandaloneContext;
import net.sf.saxon.om.NodeInfo;
import net.sf.saxon.xpath.Variable;
import org.xml.sax.InputSource;
import javax.xml.transform.sax.SAXSource;
import java.util.List;
import java.util.Iterator;
public void go(String filename) throws Exception {
// Create an XPathEvaluator and set the source document
InputSource is = new InputSource(filename);
SAXSource ss = new SAXSource(is);
XPathEvaluator xpe = new XPathEvaluator(ss);
StandaloneContext sc = (StandaloneContext) xpe.getStaticContext; String expression = "//LINE[contains(., $word)]";
Variable wordVar = sc.declareVariable("word", "");
// Set the value of the XPath variable
wordVar.setValue("svg");
//expression = "//g[@id='textes_x0020_et_x0020_puces']/g/text"; // Compile the XPath expressions used by the application XPathExpression findLine = xpe .createExpression(expression);
// Find the lines containing the requested word
List matchedLines = findLine.evaluate;
// Process these lines
for (Iterator iter = matchedLines.iterator; iter.hasNext
{
// Get the next matching line
NodeInfo line = (NodeInfo) iter.next;
// // Find where it appears in the play // findLocation.setContextNode(line); // System.out.println("\n" + findLocation.evaluateSingle); // // // Find out who the speaker of this line is // findSpeaker.setContextNode(line);
// Output the name of the speaker and the content of the // line // System.out.println(findSpeaker.evaluateSingle + ": " // + line.getStringValue); // Finish when the user enters "."
}
System.out.println("Finished.");
}
I have an svg file and use Saxon latest implementation, openSource version.
it holds nodes whose path are :
svg/g[@id='textes_x0020_et_x0020_puces']/g/text
each text node possess a transform attribute that I want to work with.
The problem is that whatever xPath expression I use, I never fetch any nodes. According to the samples, it works with regular xml but doesn't with svg (which is xml !). But well, it just doesn't
After a lot of research it happenedn that sxon does not know about the svg namespace. How can I tell him to be aware of it ??
Any ideas ?
The code :
import net.sf.saxon.xpath.XPathEvaluator;
import net.sf.saxon.xpath.XPathExpression;
import net.sf.saxon.xpath.StandaloneContext;
import net.sf.saxon.om.NodeInfo;
import net.sf.saxon.xpath.Variable;
import org.xml.sax.InputSource;
import javax.xml.transform.sax.SAXSource;
import java.util.List;
import java.util.Iterator;
public void go(String filename) throws Exception {
// Create an XPathEvaluator and set the source document
InputSource is = new InputSource(filename);
SAXSource ss = new SAXSource(is);
XPathEvaluator xpe = new XPathEvaluator(ss);
StandaloneContext sc = (StandaloneContext) xpe.getStaticContext; String expression = "//LINE[contains(., $word)]";
Variable wordVar = sc.declareVariable("word", "");
// Set the value of the XPath variable
wordVar.setValue("svg");
//expression = "//g[@id='textes_x0020_et_x0020_puces']/g/text"; // Compile the XPath expressions used by the application XPathExpression findLine = xpe .createExpression(expression);
// Find the lines containing the requested word
List matchedLines = findLine.evaluate;
// Process these lines
for (Iterator iter = matchedLines.iterator; iter.hasNext
// Get the next matching line
NodeInfo line = (NodeInfo) iter.next;
// // Find where it appears in the play // findLocation.setContextNode(line); // System.out.println("\n" + findLocation.evaluateSingle); // // // Find out who the speaker of this line is // findSpeaker.setContextNode(line);
// Output the name of the speaker and the content of the // line // System.out.println(findSpeaker.evaluateSingle + ": " // + line.getStringValue); // Finish when the user enters "."
}
System.out.println("Finished.");
}