在 Java 中读取 CDATA XML

2024-04-03

我正在尝试解析 XML 中的 CDATA tpyes。代码运行良好,它将在控制台中打印 Links: (大约 50 次,因为这就是我拥有的链接数量),但链接不会出现......它只是一个空白的控制台空间。我可能会错过什么?``

package Parse;

import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.CharacterData;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class XMLParse {
  public static void main(String[] args) throws Exception {
    File file = new File("c:test/returnfeed.xml");
    DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    Document doc = builder.parse(file);

    NodeList nodes = doc.getElementsByTagName("video");
    for (int i = 0; i < nodes.getLength(); i++) {
      Element element = (Element) nodes.item(i);
      NodeList title = element.getElementsByTagName("videoURL");
      Element line = (Element) title.item(0);
      System.out.println("Links: " + getCharacterDataFromElement(line));
    }
  }
  public static String getCharacterDataFromElement(Element e) {
    Node child = e.getFirstChild();
    if (child instanceof CharacterData) {
      CharacterData cd = (CharacterData) child;
      return cd.getData();
    }
    return "";
  }
}

Result:

Links: 

Links: 

Links: 

Links: 

Links: 

Links: 

Links: 

示例 XML:(非完整文档)

<?xml version="1.0" ?> 
<response xmlns:uma="http://websiteremoved.com/" version="1.0">

    <timestamp>
        <![CDATA[  July 18, 2012 5:52:33 PM PDT 
          ]]> 
    </timestamp>
    <resultsOffset>
        <![CDATA[  0 
          ]]> 
    </resultsOffset>
    <status>
        <![CDATA[  success 
        ]]> 
    </status>
    <resultsLimit>
        <![CDATA[  207 
        ]]> 
    </resultsLimit>
    <resultsCount>
        <![CDATA[  207 
        ]]> 
    </resultsCount>
    <videoCollection>
        <name>
            <![CDATA[  Video API 
            ]]> 
        </name>
        <count>
            <![CDATA[  207 
            ]]> 
        </count>
        <description>
            <![CDATA[  
            ]]> 
        </description>
        <videos>
            <video>
                <id>
                    <![CDATA[  8177840 
                    ]]> 
                </id>
                <headline>
                    <![CDATA[  Test1
                    ]]> 
                </headline>
                <shortHeadline>
                    <![CDATA[  Test2
                    ]]> 
                </shortHeadline>
                <description>
                    <![CDATA[ Test3

                    ]]> 
                </description>
                <shortDescription>
                    <![CDATA[ Test4

                    ]]> 
                </shortDescription>
                <posterImage>
                    <![CDATA[ http://a.com.com/media/motion/2012/0718/los_120718_los_bucher_on_howard.jpg

                    ]]> 
                </posterImage>
                <videoURL>
                    <![CDATA[ http://com/removed/2012/0718/los_120718_los_bucher_on_howard.mp4

                    ]]> 
                </videoURL>
            </video>
        </videos>
    </videoCollection>
</response>

谨慎的做法是不检查第一个子节点,而是检查该节点是否还有其他子节点。在你的情况下(我想如果你调试过该节点,你就会知道),节点传递给方法getCharacterDataFromElement有多个孩子。我更新了代码,这可能会为您指明正确的方向:

public static String getCharacterDataFromElement(Element e) {

    NodeList list = e.getChildNodes();
    String data;

    for(int index = 0; index < list.getLength(); index++){
        if(list.item(index) instanceof CharacterData){
            CharacterData child = (CharacterData) list.item(index);
            data = child.getData();

            if(data != null && data.trim().length() > 0)
                return child.getData();
        }
    }
    return "";
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Java 中读取 CDATA XML 的相关文章

随机推荐

  • 我正在尝试调用事件,但我的视觉代码显示(“事件已弃用 ts(6385)”)

    我正在使用 Visual Code 学习 Javascript 每次出现使用 事件 的类似练习 事件在代码中显示 并带有删除线 例如 e v e n t 由于这个烦人的问题 我无法完成它 在描述中弹出一条警告 显示该问题 事件已弃用 ts
  • 在 greenDao 中添加索引列的正确方法?

    我正在 greenDAO 中构建数据模型 它是使用 Core Data 的 iOS 应用程序的端口 在 iOS 中 我们使用索引 索引 来提高 20 列 属性 表中的查找性能 其中 5 列是经常查询的 我知道这会导致额外的存储空间并导致表写
  • GetFileFromApplicationUriAsync、CopyAsync、AsStreamForRead 未在 Uno 平台中实现。解决方法?

    我尝试使用以下方法 但它们都显示为未实现在 Uno Android 中 我能做些什么 是否有 Xamarin Essentials选择 或其他NuGet包 或者我应该使用本机实现在各个平台上 是否有可能实施它直接在宇野 var pdfFil
  • Go中是否有类似于finally()的东西与init()相反?

    Go 中是否有一些与此相反的东西init 在包里面做什么 这一点Go团队之前讨论过 结论是不添加对其的支持 引用minux https groups google com forum topic golang nuts qBQ0bK2zvQ
  • 如何为我的音频应用程序获得可靠的定时?

    我有一个音频应用程序 其中所有声音生成工作都是通过纯数据 使用 libpd 完成的 我用 swift 编写了一个特殊的音序器 它控制多个序列的开始 停止播放 由合成引擎以纯数据播放 到目前为止 我完全避免在应用程序的任何方面使用 Core
  • Java:浮点格式取决于区域设置[重复]

    这个问题在这里已经有答案了 我住在比利时 一般来说 在数学中 我们用逗号写小数 如下所示 3 141592这也是我的结果format浮子 System out println String format f 3 141592 So the
  • Google App Engine 目前在哪些国家和地区被屏蔽?

    我经营一个网站 您可以在世界任何地方聘请记者 我们在 150 个国家 地区设有记者 它托管在 App Engine 上 有时我们会收到记者发电子邮件给我们 说我们的网站无法从他们所在的地方访问 具体错误是 您的客户端无权从此服务器获取 UR
  • VBA通过构造继承,构造函数不起作用? [复制]

    这个问题在这里已经有答案了 我刚刚开始使用 VBA 中的类 并且遵循概述的 构造继承 方法here https www theartofquantfinance com inheritance by construction in vba
  • UILabel 的变量 IBOutlet 名称?

    呃 这里遇到了一些麻烦 我在 Interface Builder 中有 4 个显示标签 在视图控制器中设置为 IBOutlet 我已经用这些名字设置了它们 标签1 标签2 标签3 标签4 我想更改随机选择的标签的标签文本 我正在尝试这个 在
  • Microsoft Visual C++ Runtime Package 框架在清单中缺少框架依赖项声明

    我在适用于 Windows 8 1 的 Windows 应用程序认证工具包上收到以下错误 应用程序清单测试检测到以下错误 XXX 需要 对 Microsoft Visual C 运行时包的依赖 Microsoft VCLibs 110 00
  • jQuery:获取给定“y”位置上方的元素

    如何使用 jQuery 以优雅的方式做到这一点 Apply z属性 例如 红色背景 给 div 的每个孩子parent当它们的位置高于给定的顶部偏移量时y 我尝试过不同的方式 但我对其中任何一个都不满意 我知道必须有一种简短而优雅的方法来做
  • 将 Django 开发数据库 (.sql3) 迁移到 Heroku

    如何将 Django sql3 开发数据库迁移到 heroku Per here https stackoverflow com questions 14500631 how can i upload a db to heroku and
  • Django 权限,自己编码还是使用应用程序?

    这个问题 我认为 是关于 Django 中的对象 行级别权限 我们正在构建一个社区 需要能够根据用户采取的操作设置权限 例如 在您发布了如此多的答案之前 您不应该能够启动线程 此外 用户应该能够删除属于自己的内容 根据 Django 文档
  • 暂停 knockout.js 1.2.1 中的绑定

    淘汰赛中有暂停和恢复绑定的选项吗 版本 knockout js 1 2 1 我们需要暂停绑定的原因如下 在某些操作过程中 我们必须从服务器加载大量数据 例如 多个选择的整个数据都已更改 有些表的行是动态添加的等 现在 在当前场景中 表单与视
  • 如何定期刷新Excel中的数据库数据?

    在我正在制作的 Excel 电子表格 VBA 脚本中 我需要从数据库调用数据 并每 5 分钟刷新一次值 该程序从按下按钮开始 并且应该连续运行 直到用户中断执行 我目前不确定如何让 Excel VBA 等待 5 分钟而不暂停电子表格 并且理
  • 布尔表达式+短路

    我想用布尔表达式 短路求值打印一条消息 我不允许使用 if while for 但在 C Lion 中一切正常 但在其他编译器中它说 hw2q1 c In function decision hw2q1 c 38 55 error valu
  • C 8位16位32位编译器之间的区别[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Log4j RollingFileAppender 未将映射器和减速器日志添加到文件中

    我们希望将应用程序日志打印到本地节点上的文件中 我们使用 Log4j 的 RollingFileAppender Our log4j properties文件如下 ODS LOG DIR var log appLogs ODS LOG IN
  • 如何在Android资源中使用unicode?

    我想用this http www fileformat info info unicode char 1f4e1 index htm我的资源文件中的 unicode 字符 但无论我做什么 我都会以 dalvikvm 崩溃结束 使用 Andr
  • 在 Java 中读取 CDATA XML

    我正在尝试解析 XML 中的 CDATA tpyes 代码运行良好 它将在控制台中打印 Links 大约 50 次 因为这就是我拥有的链接数量 但链接不会出现 它只是一个空白的控制台空间 我可能会错过什么 package Parse imp