java:非转义引号终止xml文本节点值

时间:2012-08-20 15:13:39

标签: java xml xmldom entityreference

我正在用java编写一个Android应用程序。该应用程序模拟抽认卡,一方面有问题,另一方面有答案 我正在使用以下(相当标准的)代码来形成一个格式良好的(我相信).xml文档(由基于Qt的程序生成,该程序在读取输出时没有问题):

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    try
    {
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document dom = builder.parse(new File(diskLocation));
        Element pack = dom.getDocumentElement();
        NodeList flashCards = pack.getElementsByTagName("flashcard");
        for (int i=0; i < flashCards.getLength(); i++)
        {
            FlashCard flashCard = new FlashCard();

            Node cardNode = flashCards.item(i);
            NodeList cardProperties = cardNode.getChildNodes();
            for (int j=0;j<cardProperties.getLength();j++)
            {
                Node cardProperty = cardProperties.item(j);
                String propertyName = cardProperty.getNodeName();
                if (propertyName.equalsIgnoreCase("Question"))
                {
                    flashCard.setQuestion(cardProperty.getFirstChild().getNodeValue());
                }
                else if (propertyName.equalsIgnoreCase("Answer"))
                {
                    flashCard.setAnswer(cardProperty.getFirstChild().getNodeValue());
                }
                else if
                    ...etc.

这是学习xml的flashcard:

 <flashcard>
  <Question>What is the entity reference for ' " '?</Question>
  <Answer>&amp;quot;</Answer>
  <Info></Info>
  <Hint></Hint>
  <KnownLevel>1</KnownLevel>
  <LastCorrect>1</LastCorrect>
  <CurrentStreak>4</CurrentStreak>
  <LevelUp>4</LevelUp>
  <AnswerTime>0</AnswerTime>
 </flashcard>

据我了解标准,&#39;&lt;&#39;和&#39;&amp;&#39;需要被转义(&#39;&gt;&#39;可能应该是),但是引号和撇号不是(除非它们属于属性),但是当这张卡的问题和答案是解析后,它们分别为What is the entity reference for '&;

输入似乎遵循标准。 java XMLDom实现真的不符合标准,还是我错过了什么?

我发现很难相信我是唯一一个遇到过这个问题的人,但是我搜索了谷歌和堆栈溢出的情况,发现很少有直接相关性。

感谢您的帮助!

罗布

编辑:我刚刚意识到该文件有一个!DOCTYPE,但不是以<?xml标记开头。
我想知道这是否有所不同。

1 个答案:

答案 0 :(得分:0)

来自标准:

  

在元素的内容中,字符数据是任何不包含任何标记的起始分隔符的字符串

这意味着“或”必须在元素的内容中进行转义。