Java “无法阅读”/&引用;在设备上

Java “无法阅读”/&引用;在设备上,java,android,xml,xpath,Java,Android,Xml,Xpath,我正在处理一个xml文档并从中读取值。我正在读取的值之一。这是该值的显示方式:M/S John Smith在4。我在emulator上做了一些测试,它显示了正确的值。现在我将我的应用程序部署到我的三星Galaxy S2设备上,但该过程没有正确读取值。它只是在该名称的值字段中显示M 我想这可能是因为/是一个特殊的角色。我能做些什么来避开值中的特殊字符并按原样读取整个名称吗 注:我不是一个有经验的Java开发人员,所以这个问题对你来说可能听起来很愚蠢,但是如果你有解决方案,请让我知道 当我在控制台窗

我正在处理一个xml文档并从中读取值。我正在读取的值之一。这是该值的显示方式:
M/S John Smith在4
。我在emulator上做了一些测试,它显示了正确的值。现在我将我的应用程序部署到我的
三星Galaxy S2设备上
,但该过程没有正确读取值。它只是在该名称的值字段中显示M

我想这可能是因为/是一个特殊的角色。我能做些什么来避开值中的特殊字符并按原样读取整个名称吗

注:我不是一个有经验的Java开发人员,所以这个问题对你来说可能听起来很愚蠢,但是如果你有解决方案,请让我知道

当我在控制台窗口中打印值时,解析后它在xmlDocument中的读取方式如下:
M/;S约翰·史密斯在4号

此函数读取以下值:

public static String getCharacterDataFromElement(Element e) {
        Node child = e.getFirstChild();
        if (child instanceof CharacterData) {
          CharacterData cd = (CharacterData) child;
          return cd.getData();
        }
        return "";
      }
在adove函数中,
cd.getdata()
返回M

经过进一步调试后:


当我在watch窗口中看到元素时,对于其他名称,它只有一个子元素。但是对于包含/的元素,它有3个子元素。它将看到/在其中的stringbuffer bcz切片。我想要么我必须更改下面的函数并准备好所有子节点,要么我必须在传递它之前在其中使用转义字符。

如果我们谈论的是文本节点,您是否尝试过
节点
getNodeValue()


文档:

如果我们讨论的是文本节点,那么您是否尝试过
节点的
getNodeValue()


文档:

这就是新方法现在的样子:

public static String getCharacterDataFromElement(Element e) {
    return e.getTextContent();
  }

到目前为止,这是可行的。我不知道需要多长时间,但希望直到我决定做正确的事情,迭代子节点并连接字符串值。

这就是新方法现在的样子:

public static String getCharacterDataFromElement(Element e) {
    return e.getTextContent();
  }

到目前为止,这是可行的。我不知道需要多长时间,但希望直到我决定做正确的事情,迭代子节点并连接字符串值为止。

这听起来像是一个有趣的问题;你能把你写的代码只提取“M”吗?@mfrankli:请看编辑。问题是,正如你所猜测的,“/”是一个特殊字符。第/条;指“/”的ascii值47。这里的转折点是它可以在模拟器上工作,但不能在设备上工作,这是令人惊讶的,对此我没有一个好的答案。就简单地让它工作而言,您可以尝试将“child”强制转换为CDATA节()而不是CharacterDataIt不起作用。getFirstChild为我提供了第一个缓冲区,所以将其转换为CDATA节是行不通的。最后,我找到了答案。e、 getTextContent();这是我应该用的。至少到目前为止,它似乎给了我正确的结果。谢谢你和我一起排除故障。非常感谢你的耐心。这听起来是个有趣的问题;你能把你写的代码只提取“M”吗?@mfrankli:请看编辑。问题是,正如你所猜测的,“/”是一个特殊字符。第/条;指“/”的ascii值47。这里的转折点是它可以在模拟器上工作,但不能在设备上工作,这是令人惊讶的,对此我没有一个好的答案。就简单地让它工作而言,您可以尝试将“child”强制转换为CDATA节()而不是CharacterDataIt不起作用。getFirstChild为我提供了第一个缓冲区,所以将其转换为CDATA节是行不通的。最后,我找到了答案。e、 getTextContent();这是我应该用的。至少到目前为止,它似乎给了我正确的结果。谢谢你和我一起排除故障。非常感谢你的耐心。我试过了。同样的结果。Bcz of/sign,该节点有3个子节点。我想我必须摆脱这个角色。我试过了。同样的结果。Bcz of/sign,该节点有3个子节点。我想我必须摆脱这个角色