题
首先,我如何格式化XML处理指令,是:
<?processingInstructionName attribute="value" attribute2="value2"?>
使用StAX,我想通过处理 XMLStreamConstants.PROCESSING_INSTRUCTION
来读取它( javadoc )事件,但它只提供两种方法,然后从 XMLStreamReader
中检索有关处理指令的信息。 :
getPITarget()
getPIData()
javadoc 对于这两种方法不是很有帮助。
- XML格式是否正确?
- 这是正确的方法吗?
解析处理指令
使用StAX
XMLStreamReader
的API? - 如何使用
getPITarget()
和getPIData()
返回多个参数?
醇>
其他提示
我认为处理具有属性的指令的概念来自一些旧的xml手册。有人曾讨论过推荐PI来尊重或要求这样的结构。但是,官方的xml规范从未强制要求甚至推荐这种用法。
所以基本上你必须自己解析内容 - 它们可能是任何格式,但如果你知道它使用属性表示法,你可以解析它。
据我所知,遗憾的是,Java xml解析器或处理包都不支持这种用法。
虽然 Dimitre的回答在技术上是正确的,但现在一些流行的库正在解析处理指令伪属性。后续示例解析以下XML处理指令以获取 href
pseduo-attribute的值:
<?xml-stylesheet type="text/xsl" href="markdown.xsl"?>
JDOM2
使用 JDOM2 :
import org.jdom2.ProcessingInstruction;
import org.xml.sax.helpers.DefaultHandler;
public class ProcessingInstructionHandler extends DefaultHandler {
@Override
public void processingInstruction( final String target, final String data ) {
final ProcessingInstruction pi = new ProcessingInstruction( target, data );
System.out.println( pi.getPseudoAttributeValue( "href" ) );
}
}
撒克逊
使用 Saxon :
import static net.sf.saxon.tree.util.ProcInstParser.getPseudoAttribute;
import org.xml.sax.helpers.DefaultHandler;
public class ProcessingInstructionHandler extends DefaultHandler {
@Override
public void processingInstruction( final String target, final String data ) {
System.out.println( getPseudoAttribute( data, "href" ) );
}
}
不隶属于 StackOverflow