2013-03-25 3 views
0
содержимого файла

XMLудалить ненужные строки до и после строки в XML-файле

<distributionChannels><distributionChannel type="Wap" id="1"><contentChannelRefs> 
<contentChannelRef id="2"><categories><category 
link="http://images/11.gif" id="1"><names><name lang="de">Top Downloads</name><name 
lang="ww">Tops</name></names></category></categories></contentChannelRef> 
</contentChannelRefs></distributionChannel> 
</distributionChannels> 

Как удалить нежелательный контент, который я читаю из файла XML и вывод должен выглядеть, как показано ниже:

<category link="http://images/11.gif" id="1"><names><name lang="de">Top Downloads</name><name lang="ww">Tops</name></names></category> 

ответ

3

Надежное решение - используйте синтаксический анализатор XML. Простое решение

s = s.substring(s.indexOf("<categories>"), s.indexOf("</categories>") + 13); 

, если вы хотите прочитать Категории один за один использованием регулярных выражений

Matcher m = Pattern.compile("<category.*?>.*?</category>").matcher(xml); 
    for(int i = 0; m.find(); i++) { 
     System.out.println(m.group()); 
    } 
+0

благодаря Дорофеев, если я получил множественный в той же строке как я решить, что ... – srp

+0

нормально, см обновленную версию –

+0

спасибо, я имею в виду я хочу, чтобы извлечь только , позволяет сказать, что если У меня 100 из них, я пишу 50 в 1-й файл и следующий 50-й файл. – srp

2

шаблон соответствия с XML не рекомендуется. Используйте парсер, чтобы получить свои узлы и управлять ими соответствующим образом. Если вы заинтересованы в их печати, я включил код для печати узлов.

public static void main(String[] args) 
     throws ParserConfigurationException, SAXException, 
     IOException, XPathExpressionException { 
    DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); 
    domFactory.setNamespaceAware(true); 
    DocumentBuilder builder = domFactory.newDocumentBuilder(); 
    Document doc = builder.parse(new InputSource(new StringReader(s))); 

    XPathFactory factory = XPathFactory.newInstance(); 
    XPath xpath = factory.newXPath(); 
    XPathExpression expr 
      = xpath.compile("//categories//category"); 

    Object result = expr.evaluate(doc, XPathConstants.NODESET); 
    NodeList nodes = (NodeList) result; 
    //This is where you are printing things. You can handle differently if 
    //you would like. 
    for (int i = 0; i < nodes.getLength(); i++) { 
     System.out.println(nodeToString(nodes.item(i))); 
    } 
} 

private static String nodeToString(Node node) { 
    StringWriter sw = new StringWriter(); 
    try { 
     Transformer t = TransformerFactory.newInstance().newTransformer(); 
     t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); 
     t.setOutputProperty(OutputKeys.INDENT, "yes"); 
     t.transform(new DOMSource(node), new StreamResult(sw)); 
    } catch (TransformerException te) { 
     te.printStackTrace(); 
    } 
    return sw.toString(); 
} 
Смежные вопросы