我在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>
请提供解决方法,了解如何删除UserName
和Password
标记之间的空白区域。
答案 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);