2017-09-01 82 views
1

我使用DOM解析器在xml文件中添加了更多标签。我正在使用DOM解析器创建一些新标签,并希望通过传递数组列表来设置它们的值。我的arraylist包含我从数据库中检索的值。如何替换XML中的空值

我的代码是如下:

loading file using dom parser 


    for(String s:a.List){ 
Element n= doc.createElement("value"); 
n.appendChild(doc.createTextNode(String.valueOf(s))); 

    } 

我在这里创造新的标签,并在该标签通过S的值。

Output I am getting: 

<value>1</value> 

<value>2</value> 

<value>3</value> 

<value>null</value> 

<value>null</value> 

<value>4</value> 

; ; 等

Expected output: 

<value>1</value> 
<value>2</value> 

<value>3</value> 

<value/> 

<value/> 

<value>4<value> 

我想删除空是从DATABSE来ArrayList和比XML及以上 提到请帮忙弄形式...

+0

你可以发布你的代码循环? – AjahnCharles

+0

我有编辑我的代码...请看看 – user8548920

+0

我想如果你不添加文本节点,它会自动崩溃。我发布了一个答案,用于在追加之前检查字符串是否为空。 – AjahnCharles

回答

3

空标签:

String.valueOf()迫使null转换为字符串"null"。只是删除转换和空标签就会崩溃:

for(String s : a.List){ 
    Element n = doc.createElement("value"); 
    n.appendChild(doc.createTextNode(s)); // null renders as empty 
} 

同样的倒塌应该发生空字符串""(如果你正在做别的事情与字符串也可能是方便):

for(String s : a.List){ 
    Element n = doc.createElement("value"); 
    if(s == null) { s = ""; } // force nulls to be empty Strings 
    n.appendChild(doc.createTextNode(s)); 
} 

...或者你可以有条件地忽略孩子(也创建了一个折叠的标签):

for(String s : a.List){ 
    Element n = doc.createElement("value"); 
    if(s != null) { 
     n.appendChild(doc.createTextNode(s)); // only append non-null values 
    } 
} 

没有标签:

如果你想忽略标签完全可以做到这一点:

for(String s : a.List){ 
    if(s != null) { 
     Element n = doc.createElement("value"); 
     n.appendChild(doc.createTextNode(s)); 
    } 
} 
+0

它似乎将删除空标签的完整标签..我不想删除标签..我想这样 user8548920

+0

肯定会试试这个 – user8548920

+0

@ user8548920 - 读了更多一点,我想你想添加节点,但是有一个空值,即''“'。我已经更新了我的第一个代码块。 – AjahnCharles

0

将这项工作吗?

String value = String.valueOf(s); 
if (! 'null'.equals(value)) { n.appendChild(doc.createTextNode(value)); } 

这应该离开这个节点,如果ns"null"

+0

尝试过类似的东西..有些类似的东西,但不完全这this..was获取空指针异常 – user8548920

0

我尝试下面的代码:

for(String b:a) 
{ 
    Element valuesElements = doc.createElement("values"); 
    if(b!=null) 
    { 
     valuesElements.appendChild(doc.createTextNode(b)); 
    } 
     rootElement.appendChild(valuesElements); 
} 

,并得到如下结果:

<root><values>a</values><values/></root> 

也许这是你想要的