我有下一个要分析的XML文件:
<?xml version="1.0" encoding="windows-1252"?>
<!DOCTYPE colHAREM>
<colHAREM versao="Segundo_dourada_com_relacoes_14Abril2010">
<DOC DOCID="H2-dftre765">
<P>A Reforma Religiosa e Política
na
<EM ID="H2-dftre765-28" CATEG="LOCAL" TIPO="HUMANO" SUBTIPO="PAIS" COREL="H2-dftre765-37" TIPOREL="incluido">Inglaterra</EM>
</P>
<P>
<EM ID="H2-dftre765-29" CATEG="PESSOA" TIPO="INDIVIDUAL" COREL="H2-dftre765-28" TIPOREL="natural_de">Henrique VIII</EM>
O curso da
<EM ID="H2-dftre765-30" CATEG="ACONTECIMENTO|OBRA" TIPO="EFEMERIDE|PLANO" COREL="H2-dftre765-26" TIPOREL="ident">Reforma</EM>
foi diferente na
<EM ID="H2-dftre765-31" CATEG="LOCAL" TIPO="HUMANO" SUBTIPO="PAIS" COREL="H2-dftre765-31" TIPOREL="ident">Inglaterra</EM>
. Tinha havido desde há muito uma forte corrente anti-clerical, tendo a
<EM ID="H2-dftre765-32" CATEG="PESSOA|LOCAL" TIPO="POVO|HUMANO" SUBTIPO="|PAIS" COREL="H2-dftre765-28 H2-dftre765-28" TIPOREL="LOCAL**ident**H2-dftre765-28**LOCAL PESSOA**natural_de**H2-dftre765-28**LOCAL">Inglaterra</EM>
já tido o movimento
<EM ID="H2-dftre765-33" CATEG="ABSTRACCAO" TIPO="DISCIPLINA" COREL="H2-dftre765-28" TIPOREL="praticado_em">Lollard</EM>
, que inspirou os
<EM ID="H2-dftre765-34" CATEG="PESSOA" TIPO="GRUPOMEMBRO">Hussitas</EM>
na
<EM ID="H2-dftre765-35" CATEG="LOCAL" TIPO="HUMANO" SUBTIPO="REGIAO" COREL="H2-dftre765-34 H2-dftre765-31" TIPOREL="pratica_se incluido">Boémia</EM>
. Mas
<EM ID="H2-dftre765-39" CATEG="TEMPO" TIPO="TEMPO_CALEND" SUBTIPO="DATA" COREL="H2-dftre765-72" TIPOREL="incluido">em cerca de 1520</EM>
, no entanto, os
<EM ID="H2-dftre765-40" CATEG="PESSOA" TIPO="GRUPOMEMBRO" COREL="H2-dftre765-33" TIPOREL="praticante_de">Lollards</EM>
não eram já uma força activa, ou pelo menos um movimento de massas.
</P>
</DOC>
</colHAREM>
目标是调查属性 并提取“ CATEG ”和“ TIPO ”,然后属性
我收到了以下代码:
import java.io.File;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
public class xml {
public static void main(String[] args) throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
Document doc = null;
NodeList nodes = null;
//Set<String> ids = null;
try {
doc = factory.newDocumentBuilder().parse(new File("teste.xml"));
XPathExpression expr = XPathFactory.newInstance().newXPath().compile("//@TIPO");
//ids = new HashSet<String>();
nodes = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (XPathExpressionException e) {
e.printStackTrace();
}
for (int i = 0; i < nodes.getLength(); i++) {
//System.out.println("."); //progress indicator
Element el = ((Attr) nodes.item(i)).getOwnerElement();
if ( el.hasAttribute("CATEG") || el.hasAttribute("TIPO"))
{
System.out.println(el.getAttribute("CATEG")+ " - "+el.getAttribute("TIPO"));//el.removeAttribute("siteKey");
//System.out.println(el.getLocalName().trim());
}
}
}
}
输出结果为:
LOCAL - HUMANO
PESSOA - INDIVIDUAL
ACONTECIMENTO|OBRA - EFEMERIDE|PLANO
LOCAL - HUMANO
PESSOA|LOCAL - POVO|HUMANO
ABSTRACCAO - DISCIPLINA
PESSOA - GRUPOMEMBRO
LOCAL - HUMANO
TEMPO - TEMPO_CALEND
PESSOA - GRUPOMEMBRO
我想要类似的东西:
LOCAL - HUMANO - Inglaterra
PESSOA - INDIVIDUAL - Henrique_VIII
......
TEMPO - TEMPO_CALEND - em_cerca_de_1520
PESSOA - GRUPOMEMBRO - Lollards
我不知道如何获取属性,请注意我需要将ATTRIBUTES连接到_ 例如:em cerca de 1520应该是em_cerca_de_1520,这就是这里的属性标签。
提前谢谢。
答案 0 :(得分:1)
此处也提出了类似的问题:How can i get element text in node in Java?
请将您的打印声明更改为以下内容:
class ApplicationContext : Application() {
var baseComponent: BaseComponent? = null
private set
override fun onCreate() {
super.onCreate()
initializeInjector()
}
private fun initializeInjector() {
// DaggerBaseComponent is and unresolved reference
baseComponent = DaggerBaseComponent.builder()
.appModule(AppModule(this))
.endpointModule(EndpointModule())
.build()
}
companion object {
operator fun get(context: Context): ApplicationContext {
return context.applicationContext as ApplicationContext
}
}
}
我认为你对xmls中元素和属性之间的区别有一点误解,双引号中的值是属性值,但是你想要添加的值是元素的文本值(而不是属性)。
答案 1 :(得分:1)
你可以做这样的事情:
System.out.println(el.getAttribute("CATEG")+ " - "+el.getAttribute("TIPO")) + " -" +el.getFirstChild().getNodeValue()
答案 2 :(得分:0)
感谢您的帮助。 用&#34; _&#34;替换所有空白区域我用:
elem= elem.replaceAll("\\s+","_");