在 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 的相关文章

  • Java - 将节点添加到列表的末尾?

    这是我所拥有的 public class Node Object data Node next Node Object data Node next this data data this next next public Object g
  • 如何使用sql作为xml路径('')但保留回车符

    我有下面的代码 select select cast Narrative as Varchar max char 13 from officeclientledger where ptmatter matter and ptTrans 4
  • 制作一个交互式Windows服务

    我希望我的 Java 应用程序成为交互式 Windows 服务 用户登录时具有 GUI 的 Windows 服务 我搜索了这个 我发现这样做的方法是有两个程序 第一个是服务 第二个是 GUI 程序并使它们进行通信 服务将从 GUI 程序获取
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • Android MediaExtractor seek() 对 MP3 音频文件的准确性

    我在使用 Android 时无法在eek 上获得合理的准确度MediaExtractor 对于某些文件 例如this one http www archive org download emma solo librivox emma 01
  • 磁模拟

    假设我在 n m 像素的 2D 表面上有 p 个节点 我希望这些节点相互吸引 使得它们相距越远吸引力就越强 但是 如果两个节点之间的距离 比如 d A B 小于某个阈值 比如 k 那么它们就会开始排斥 谁能让我开始编写一些关于如何随时间更新
  • 无法解析插件 Java Spring

    我正在使用 IntelliJ IDEA 并且我尝试通过 maven 安装依赖项 但它给了我这些错误 Cannot resolve plugin org apache maven plugins maven clean plugin 3 0
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • 十进制到八进制的转换[重复]

    这个问题在这里已经有答案了 可能的重复 十进制转换错误 https stackoverflow com questions 13142977 decimal conversion error 我正在为一个类编写一个程序 并且在计算如何将八进
  • 禁止的软件包名称:java

    我尝试从数据库名称为 jaane 用户名 Hello 和密码 hello 获取数据 错误 java lang SecurityException Prohibited package name java at java lang Class
  • 使用Caliper时如何指定命令行?

    我发现 Google 的微型基准测试项目 Caliper 非常有趣 但文档仍然 除了一些示例 完全不存在 我有两种不同的情况 需要影响 JVM Caliper 启动的命令行 我需要设置一些固定 最好在几个固定值之间交替 D 参数 我需要指定
  • getResourceAsStream() 可以找到 jar 文件之外的文件吗?

    我正在开发一个应用程序 该应用程序使用一个加载配置文件的库 InputStream in getClass getResourceAsStream resource 然后我的应用程序打包在一个 jar文件 如果resource是在里面 ja
  • Eclipse Java 远程调试器通过 VPN 速度极慢

    我有时被迫离开办公室工作 这意味着我需要通过 VPN 进入我的实验室 我注意到在这种情况下使用 Eclipse 进行远程调试速度非常慢 速度慢到调试器需要 5 7 分钟才能连接到远程 jvm 连接后 每次单步执行断点 行可能需要 20 30
  • Google App Engine 如何预编译 Java?

    App Engine 对应用程序的 Java 字节码使用 预编译 过程 以增强应用程序在 Java 运行时环境中的性能 预编译代码的功能与原始字节码相同 有没有详细的信息这是做什么的 我在一个中找到了这个谷歌群组消息 http groups
  • 如何从泛型类调用静态方法?

    我有一个包含静态创建方法的类 public class TestClass public static
  • 玩!框架:运行“h2-browser”可以运行,但网页不可用

    当我运行命令时activator h2 browser它会使用以下 url 打开浏览器 192 168 1 17 8082 但我得到 使用 Chrome 此网页无法使用 奇怪的是它以前确实有效 从那时起我唯一改变的是JAVA OPTS以启用
  • 声明的包“”与预期的包不匹配

    我可以编译并运行我的代码 但 VSCode 中始终显示错误 早些时候有一个弹出窗口 我不记得是什么了 我点击了 全局应用 从那以后一直是这样 Output is there but so is the error The declared
  • simpleframework,将空元素反序列化为空字符串而不是 null

    我使用简单框架 http simple sourceforge net http simple sourceforge net 在一个项目中满足我的序列化 反序列化需求 但在处理空 空字符串值时它不能按预期工作 好吧 至少不是我所期望的 如
  • 有没有办法为Java的字符集名称添加别名

    我收到一个异常 埋藏在第 3 方库中 消息如下 java io UnsupportedEncodingException BIG 5 我认为发生这种情况是因为 Java 没有定义这个名称java nio charset Charset Ch
  • Spring Boot @ConfigurationProperties 不从环境中检索属性

    我正在使用 Spring Boot 1 2 1 并尝试创建一个 ConfigurationProperties带有验证的bean 如下所示 package com sampleapp import java net URL import j

随机推荐

  • 我正在尝试调用事件,但我的视觉代码显示(“事件已弃用 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