Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
1 / 1 / 1
Регистрация: 29.05.2014
Сообщений: 20
1

Не работает XPath при анализе XML

14.10.2014, 16:52. Просмотров 942. Ответов 2
Метки нет (Все метки)


Пишу программу, которая должна заменять в docx-документе выбранное слово другим. Разобрался с тем, что docx -формат - это архив xml, нашел xml, в котором находится содержание документа. Сейчас разбираюсь с xml и зашел в тупик. Если свести проблему к небольшой задаче, то получается следующее:

Допустим, у нас есть небольшой XML:
XML
1
2
3
4
5
6
<?xml version="1.0"?>
<aaa>
    <bbb>
        Текст
    </bbb>
</aaa>
Для простейшего парсинга использую следующий код:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import java.io.IOException;
 
public class test2 {
    public static void main(String[] args) throws ParserConfigurationException, IOException, SAXException, XPathExpressionException {
        String filepath = "C:\\tmp\\test.xml";
        DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
        Document doc = docBuilder.parse(filepath);
 
        XPath xPath =  XPathFactory.newInstance().newXPath();
 
        String expression = "//aaa/bbb";
        //read a string value
        String text = xPath.compile(expression).evaluate(doc);
 
        System.out.println(text);
    }
}
Все работает нормально.

Но в XML, который содержит информацию из docx, есть множество тегов типа: <w:r>, <w:t> и т.д. ссылка
Это вызывает проблему разбора XML. Если переписать простейший XML с этими тегами, то приведенный ниже код с ними не работает.
XML
1
2
3
4
5
6
<?xml version="1.0"?>
<w:r>
    <w:t>
        Текст
    </w:t>
</w:r>
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import java.io.IOException;
 
public class test2 {
    public static void main(String[] args) throws ParserConfigurationException, IOException, SAXException, XPathExpressionException {
        String filepath = "C:\\tmp\\test.xml";
        DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
        Document doc = docBuilder.parse(filepath);
 
        XPath xPath =  XPathFactory.newInstance().newXPath();
 
        String expression = "//w:r/w:t";
        //read a string value
        String text = xPath.compile(expression).evaluate(doc);
 
        System.out.println(text);
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.10.2014, 16:52
Ответы с готовыми решениями:

Не работает программа, не дает ошибку при анализе
возможно проблема компиляции #include &lt;iostream.h&gt; #include &lt;math.h&gt; #include &lt;stdlib.h&gt; ...

LINQ to XML или XPath to XML (выбор одного элемента)
Прошу помощи в LINQ или XPath запросе к XML Вот XML: &lt;manifest...

Прочитать Xml файл, XPath
Доброго времени суток! Пытаюсь на C# просмотреть(прочитать, распарсить, как угодно называйте, не...

Парсинг файла xml с Xpath
Необходимо вывести в консоли из файла xml fullName, INN, KPP из узла customerInfo. &lt;?xml...

__________________
Помогаю в написании студенческих работ здесь.
Записывайтесь на профессиональные курсы Java-разработчиков
2
30 / 30 / 34
Регистрация: 22.08.2014
Сообщений: 108
16.10.2014, 12:50 2
Добрый день.
Можно получить значение так:
XML
1
//*[local-name()='t']/text()
1
1 / 1 / 1
Регистрация: 29.05.2014
Сообщений: 20
16.10.2014, 13:42  [ТС] 3
Спасибо большое!
Похоже, это именно то, что я искал.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.10.2014, 13:42

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

XPath и работа с xml-файлом
Есть xml файл со структурой &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; &lt;root&gt; &lt;element id=&quot;&quot;&gt; ...

Xpath для работы с xml документами
Добрый вечер.Столкнулась с задачей,требующей преобразование xml документа,хранящегося в одной из...

Create XML file with XPath, using XDocument
Здравствуйте! (тема на англ, т.к. форум не позволяет использовать понятное русское название) ...

Нет результата запроса к XML (XPath)
Не могу найти ошибку. Нужно из файла xml вытащить к примеру значение атрибута name узла...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.