- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
无法解析一些基本的 XML。我正在 Apex language 中执行此操作,但它在语法上几乎与 Java 相同,在本例中使用 java.xml.stream.XMLStreamReader作为其 XML 解析引擎。
问题是:我没有运气获得任何实际的 XML 节点名称。当我循环访问所有节点时,XmlStreamReader 类中的 getLocalName() 方法始终返回 null。
此时的功能非常基本。如果运行此命令,您将看到 reader.getLocalName() 始终返回 null,所有附带方法(getNameSpace()、getLocation()、getPrefix())也是如此。
有什么想法吗?我对 XML 的格式感到困惑......所以我必须按原样解析它。我可以使用各种解决方法(正则表达式、计数节点等),但这些方法很困惑且不理想。
最佳答案
我已将您的代码重组为一个 block ,可以在工作台的匿名执行窗口中进行测试。我运行代码,然后过滤执行日志以显示 USER_DEBUG 语句。输出显示了您所期望的节点名称和文本。我认为关键是使用 APEX 方法 hasText() 和 hasName()。
String XML_STR = '<document>' + '<result>success</result>' +'<resultcode>000000</resultcode>' +
'<note></note>' + '<item>' +'<quantity>1</quantity>' +
'<fname>Bob</fname>' +'<lname>Tungsten</lname>' +
'<address>23232 Fleet Street</address>' +'<city>Santa Clara</city>' +
'<state>CA</state>' +'<zip>94105</zip>' +
'<country>United States</country>' +'<email>blahblahblah@blahblahblah.com</email>' +
'<phone>4155555555</phone>' +'</item>' +'</document>';
XmlStreamReader reader = new XmlStreamReader(XML_STR);
while (reader.hasNext()) {
System.debug('$$$ reader.getEventType(): ' + reader.getEventType());
if (reader.hasName()) {
System.debug('$$$ reader.getLocalName(): ' + reader.getLocalName());
// System.debug('$$$ reader.getNamespace(): ' + reader.getNamespace());
// System.debug('$$$ reader.getprefix(): ' + reader.getprefix());
}
if (reader.hasText()) {
System.debug('$$$ reader.getText(): ' + reader.getText());
}
System.debug('$$$ Go to next');
reader.next();
}
这是另一个基于 Jon Mountjoy 配方的解决方案 http://developer.force.com/cookbook/recipe/parsing-xml-using-the-apex-dom-parser
private String walkThrough(DOM.XMLNode node) {
String result = '\n';
if (node.getNodeType() == DOM.XMLNodeType.COMMENT) {
return 'Comment (' + node.getText() + ')';
}
if (node.getNodeType() == DOM.XMLNodeType.TEXT) {
return 'Text (' + node.getText() + ')';
}
if (node.getNodeType() == DOM.XMLNodeType.ELEMENT) {
result += 'Element: ' + node.getName();
if (node.getText().trim() != '') {
result += ', text=' + node.getText().trim();
}
if (node.getAttributeCount() > 0) {
for (Integer i = 0; i< node.getAttributeCount(); i++ ) {
result += ', attribute #' + i + ':' + node.getAttributeKeyAt(i) + '=' + node.getAttributeValue(node.getAttributeKeyAt(i), node.getAttributeKeyNsAt(i));
}
}
for (Dom.XMLNode child: node.getChildElements()) {
result += walkThrough(child);
}
return result;
}
return ''; //should never reach here
}
private String parse(String toParse) {
DOM.Document doc = new DOM.Document();
try {
doc.load(toParse);
DOM.XMLNode root = doc.getRootElement();
return walkThrough(root);
} catch (System.XMLException e) { // invalid XML
return e.getMessage();
}
}
String XML_STR = '<document>' + '<result>success</result>' +'<resultcode>000000</resultcode>' +
'<note></note>' + '<item>' +'<quantity>1</quantity>' +
'<fname>Bob</fname>' +'<lname>Tungsten</lname>' +
'<address>23232 Fleet Street</address>' +'<city>Santa Clara</city>' +
'<state>CA</state>' +'<zip>94105</zip>' +
'<country>United States</country>' +'<email>blahblahblah@blahblahblah.com</email>' +
'<phone>4155555555</phone>' +'</item>' +'</document>';
System.debug(parse(XML_STR));
关于java - 基本的 XML 解析问题。无法通过 Java XmlStreamReader 方法找到节点名称。有任何想法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13675702/
像这样遍历 XML 文档时 while(streamReader.hasNext()){ streamReader.next(); if(streamReader.getEventTy
我正在使用 XMLStreamReader 读取 XML 文件并查找特定元素,然后更新相应的值。 我的问题是有没有办法可以打印每个元素,包括文档的开头,例如: 每次我执行reader.next()?
我正在使用 XMLStreamReader 并解析以下 XML: level0 level1
正如我在 Reading escape characters with XMLStreamReader 中看到的那样,这个问题似乎以前曾出现过。 但我在这里看到的问题略有不同。 我正在读取一个相当大的
我正在使用 XMLStreamReader 解析 XML 。在 标签有一些从数据库加载的数据(WebRowSet对象)。问题是这个标签的内容非常长(假设有几百KB——数据以Base64编码),但是in
我希望 XmlStreamReader 从文档的开头启动(显然),然后当我对其调用 next() 时跳转到 XML 文档的根目录。然而,可怕的是,我看到它跳转到第一个带有文本的标签,并且总是忽略根,并
我正在使用 javax.xml 中的 XMLStreamReader 接口(interface)来解析 XML 文件。该文件包含巨大的数据量和几个 KB 的单个文本节点。 验证和读取通常效果很好,但我
我有一个 XMLStreamReader,当我仔细阅读 xml 时,它会跳过一个元素并转到下一个元素。我想按顺序阅读所有内容,因此这对我来说非常烦人并且破坏了我的解析。 这是 XML: Cha
更新 Java 社区中没有现成的 XML 解析器可以进行 NIO 和 XML 解析。这是我找到的最接近的,但不完整:http://wiki.fasterxml.com/AaltoHome 我有以下代码
你好我想知道如何将XML标签形式的字符串内容转换成XMLStreamReader 最佳答案 您可以使用 XMLInputFactory.createXMLStreamReader , 传入 Strin
我的 XML 中有一些来自 Unicode 扩展 B 中文/日文/韩文的字符: 𠀀𠀁𠀂𠀃𠀄𪛔𪛕𪛖 但是当我使用 streamReader.getText() 时它返回: ࠀ 有谁知道J
我有以下 XML 代码 medium weak 我使用以下代
我有一些正在阅读的 xml。 website Tommy Jay
如果我有一个 XML 元素,例如: this is a title 使用 XMLStreamReader.getElementText() 很容易获取文本。但是,如果我遇到这样的元素,我无法弄清楚如何
假设我们有以下 XML "Hi" 我使用 XMLStreamReader 加载此 XML 并使用读取器对象进行解析。当我使用阅读器的 getText() 打印解析时遇到的字
我正在使用下面的代码使用 XMLStreamReader 读取 hadoop RecordReader 中的大型 xml 文件(以 GB 为单位) public class RecordReader
我在XMLStreamReader中找不到任何peek或unread功能文档。例如,为了解析 HTML 列表中的子元素列表,获得至少一个标记前瞻的首选方法是什么? 当我使用 ul 和
我需要连接一个接收 StAX XMLStreamReader 作为输入的 API,并过滤提供的流(将某个属性的值从 true 更改为 false)。 查看了 StreamReaderDelegate,
我同时运行了 Python 脚本和 Java 测试。它们都试图做完全相同的事情——打开一个套接字,接收一个永无止境的 XML 流,并在接收到 XML 时对其进行解析。 Python 脚本使用 Expa
我正在使用 XMLStreamReader 读取 xml 文件。 该文件包含以下形式的转义字符:ü。 在我看来,两个转义字符应该代表字符“ü”(UTF-8 编码?) 但 xml 流读取器创建以下字符
我是一名优秀的程序员,十分优秀!