0

我正在用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>
  <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>

据我了解标准,'<' 和 '&' 需要转义('>' 可能应该是),但引号和撇号不需要(除非它们在属性中),但是当问题和答案时卡被解析,它们分别作为What is the entity reference for '和出来&

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

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

感谢您的任何帮助!

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

4

1 回答 1

0

从标准:

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

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

于 2012-08-20T15:29:43.027 回答