如何删除XML中标记之间的空格

时间:2010-11-25 07:14:57

标签: android xml

我在Android应用程序中使用Java创建了一个XML文档。我必须在我的应用程序中调用Web服务并将此XML作为参数传递。但我的问题是在XML中的每个标记之间创建了一个空格。

DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = dbfac.newDocumentBuilder();
Document doc = docBuilder.newDocument();

Element root = doc.createElement("subscriber");
doc.appendChild(root);

//creating child node for username
EditText txtusername=(EditText)findViewById(R.id.txtUserName);
subscriber[0]=String.valueOf(txtusername.getText());
Element UserName=doc.createElement("UserName");             
UserName.setTextContent(subscriber[0]);
root.appendChild(UserName);

//creating child node for PASSWORD 
EditText txtPassword=(EditText)findViewById(R.id.txtPassword);
subscriber[1]=String.valueOf(txtPassword.getText());
Element Password=doc.createElement("Password");
Password.setTextContent(subscriber[1]);
root.appendChild(Password);

//set up a transformer
TransformerFactory transfac = TransformerFactory.newInstance();
Transformer trans = transfac.newTransformer();
trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
trans.setOutputProperty(OutputKeys.INDENT, "yes");

//create string from xml tree
StringWriter sw = new StringWriter();
StreamResult result = new StreamResult(sw);
DOMSource source = new DOMSource(doc);
trans.transform(source, result);
String xmlString =sw.toString();

url = new URL("http://192.168.70.14/NewsLetter/subscribing.php?register= " + xmlString);

conn = (HttpURLConnection) url.openConnection();
conn.addRequestProperty("Content-Type", "text/xml; charset=UTF-8"); 
dis = conn.getInputStream();

XML是:

<subscriber> <UserName>miya</UserName> <Password>today</Password> </subscriber>

请提供解决方法,了解如何删除UserNamePassword标记之间的空白区域。

6 个答案:

答案 0 :(得分:12)

当然,这取决于你自己的XML,但是你可以试试正则表达式。

举个例子:

yourXmlAsString.replaceAll(">\\s*<", "><");

将删除每个XML元素之间的所有空格。

答案 1 :(得分:7)

方法documentBuilderFactory.setIgnoringElementContentWhitespace()控制空白创建。在创建DocumentBuilder之前使用此选项。

dbfac.setIgnoringElementContentWhitespace(true);

答案 2 :(得分:4)

我可以使用以下属性从转换中删除空格/制表符/换行符:

transformer.setOutputProperty(OutputKeys.INDENT, "no");

你把它设置为是。我相信这个问题已经足够大了,现在没关系;但如果将来有人遇到此问题,请将该属性设置为 no 保存我。

答案 3 :(得分:0)

这是正则表达式(?:>)(\s*)<

在用于Java的代码中使用它时 "(?:>)(\\s*)<"并替换为"><"

String xmlString = "<note>    <to>Tove</to>    <from>Jani</from <heading>Reminder</heading> <title>Today</title>    <body>Don't forget me this weekend!</body>    </note>";

String str = xmlString.replaceAll("(?:>)(\\s*)<", "><");

这将删除标记之间的空格,并保留该值的空格。

输入:

<note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading> <title>Today</title>
    <body>Don't forget me this weekend!</body>
</note>

输出:

<note><to>Tove</to><from>Jani</from><heading>Reminder</heading><title>Today</title><body>Don't forget me this weekend!</body></note>

答案 4 :(得分:0)

没有其他答案对我有用。我必须使用下面的代码来删除附加的空格和换行。

"Inserted 803974 rows"

答案 5 :(得分:0)

您可以创建文档中所有节点的副本,并修剪每个节点的nodeValue(如果存在)。

const copyChildrenNodesWithoutWhiteSpace = (document) => {
  const clone = document.cloneNode();

  for (const child of document.childNodes) {
    const childCopy = copyChildrenNodesWithoutWhiteSpace(child);
    clone.appendChild(childCopy);

    if (childCopy.nodeValue) {
      childCopy.nodeValue = childCopy.nodeValue.trim();
    }
  }

  return clone;
};

const result = copyChildrenNodesWithoutWhiteSpace(anyDocument);