---
title: "Regex XML"
type: "forum-thread"
url: "https://www.webforum.nu/amne/java/95157-regex-xml"
topic: "Java"
topic_url: "https://www.webforum.nu/amne/java"
author: "AG"
published: "2004-01-18T18:47:36.000Z"
updated: "2004-01-22T03:11:12.000Z"
replies: 9
views: 413
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/java/95157-regex-xml"
---

# Regex XML

## #1 — AG, 2004-01-18T18:47Z

Är i en något brådska och skulle verkligen uppskatta ifall någon kunde hjälpa mig med en regex.
Jag läser med ett program in en xml-fil.
Ur denna fil skulle jag vilja plocka ut värden, för att senare sätta in i databas.
Filen är uppdelad enligt principen:
\<cube name="name_str" value="value_double"/\>
\<cube name="name_str2" value="value_double2"/\>
och fortsätter så.

Jag skulle vilja plocka ut dessa värden, för att som sagt inkludera i en databas, som jag sköter med en böna.

Hur gör jag en sådan regex-loop?

Andreas

Permalänk: https://www.webforum.nu/p/95157

## #2 — SPiN, 2004-01-18T19:23Z

Varför använda regexp's? Kan du inte använda någon XML-parser likväl? I så fall rekommenderar jag JDOM, <http://www.jdom.org> , den är smidig. :)

Permalänk: https://www.webforum.nu/p/1254390

## #3 — Aleph_One, 2004-01-18T19:31Z

japp håller med SPiN. Använd en XML-parser.

Nåt sånt här kanske:

```
import java.io.IOException;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.FactoryConfigurationError;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException;
import org.apache.xpath.XPathAPI;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class ParseXML
{
	public ParseXML()
	{
		String file = "conf/cube.xml";
		try
		{
			Document mDocument =
				DocumentBuilderFactory
					.newInstance()
					.newDocumentBuilder()
					.parse(
					file);
			NodeList list = XPathAPI.selectNodeList(mDocument, "cubes/cube");
			for (int i = 0; i < list.getLength(); i++)
			{
				Node node = list.item(i);
				String name =
					node.getAttributes().getNamedItem("name").getNodeValue();
				String value =
					node.getAttributes().getNamedItem("value").getNodeValue();
				System.out.println("name=" + name + ", value=" + value);
			}
		}
		catch (SAXException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		catch (IOException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		catch (ParserConfigurationException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		catch (FactoryConfigurationError e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		catch (TransformerException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	public static void main(String[] args)
	{
		new ParseXML();
	}
}
```

Förutsatt att xml koden ser ut så här, men det är ju lätt att ändra..

```
<?xml version="1.0" encoding="ISO-8859-1"?>
<cubes>
	<cube name="name_str1" value="value_double"/>
	<cube name="name_str2" value="value_double2"/>
	<cube name="name_str3" value="value_double2"/>
	<cube name="name_str4" value="value_double2"/>
	<cube name="name_str5" value="value_double2"/>
	<cube name="name_str6" value="value_double2"/>
</cubes>
```

Permalänk: https://www.webforum.nu/p/1254396

## #4 — AG, 2004-01-19T07:23Z

ok, tack.
Finns det någon parser inbyggd i Tomcat?

Andreas

Permalänk: https://www.webforum.nu/p/1254534

## #5 — Aleph_One, 2004-01-19T08:16Z

Japp Xerces är med i Tomcat5 iaf.
Vill du använda nån annan parser så är det inte svårare än att du lägger med den jar filen i tomcats common/lib/ om jag kommer ihåg rätt. Eller så lägger du den så att den bara är tillgänglig för din webapp i /WEB-INF/lib/ även om det inte är det smidigaste.

<http://xml.apache.org/xerces-j/>
<http://xml.apache.org/xerces-j/apiDocs/index.html>

Permalänk: https://www.webforum.nu/p/1254552

## #6 — AG, 2004-01-19T12:30Z

Jag har ett konto på www.javaservlethosting.com.
Behöver nåt som fungerar smidigt id en miljön, hur lägger man in jdom på ett sådant ställe?

Andreas

Permalänk: https://www.webforum.nu/p/1254650

## #7 — Lime, 2004-01-20T09:48Z

På samma sätt som man lägger in allt annat. Man laddar upp det. Om det är en JSP/Servlet-enablad server så är det bara att lasta ner det i lib-katalogen.

Permalänk: https://www.webforum.nu/p/1255180

## #8 — AG, 2004-01-21T22:32Z

Har laddat hem Jdom nu, men måste erkänna att jag är en fullständig novis. Jag får det helt enkelt inte att fungera. Hur skall jag skapa jar-filen, och är det den som skall in i lib-katalogen?

Andreas

Permalänk: https://www.webforum.nu/p/1255995

## #9 — AG, 2004-01-21T22:55Z

Verkar nu ha problem med att klippa ut får felet:

```
org.apache.crimson.parser.EndOfInputException
        at org.apache.crimson.parser.Parser2.fatal(Parser2.java:3182)
        at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:520)
        at org.apache.crimson.parser.Parser2.parse(Parser2.java:305)
        at org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:442)

        at org.apache.crimson.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl
.java:185)
        at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:134)
        at xml2.ParseXML.<init>(ParseXML.java:20)
        at xml2.ParseXML.main(ParseXML.java:65)
```

Vill hämta dagens valuta från:
<http://www.ecb.int/stats/eurofxref/eurofxref-hist.xml>

Koden som används är 

```
package xml2;

import java.io.IOException;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.FactoryConfigurationError;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException;
import org.apache.xpath.XPathAPI;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class ParseXML
{
	public ParseXML()
	{
		String file = "cube.xml";
		try
		{
			Document mDocument =
				DocumentBuilderFactory
					.newInstance()
					.newDocumentBuilder()
					.parse(
					file);
			NodeList list = XPathAPI.selectNodeList(mDocument, "gesmes:Envelope/Cube/Cube/Cube");
			for (int i = 0; i < list.getLength(); i++)
			{
				Node node = list.item(i);
				String name =
					node.getAttributes().getNamedItem("currency").getNodeValue();
				String value =
					node.getAttributes().getNamedItem("rate").getNodeValue();
				System.out.println("name=" + name + ", value=" + value);
			}
		}
		catch (SAXException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		catch (IOException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		catch (ParserConfigurationException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		catch (FactoryConfigurationError e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		catch (TransformerException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	public static void main(String[] args)
	{
		new ParseXML();
	}
}
```

Andreas

Permalänk: https://www.webforum.nu/p/1256004

## #10 — Aleph_One, 2004-01-22T03:11Z

Så här kan du hämta dagens.. (ändra från -1 till 0 för att testa mot dagens.. dom hade inte kommit när jag testade.. det är därför som jag satte den att hämta från igår)

```
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.FactoryConfigurationError;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException;

import org.apache.xpath.XPathAPI;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class ParseXML
{
	public ParseXML()
		throws
			SAXException,
			IOException,
			ParserConfigurationException,
			FactoryConfigurationError,
			TransformerException
	{
		String url = "http://www.ecb.int/stats/eurofxref/eurofxref-hist.xml";

		Calendar cal = Calendar.getInstance();
		cal.setTime(new Date());
		cal.add(Calendar.DATE, [b]-1[/b]);
		String date = new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());

		System.out.println("Date: " + date);

		Document mDocument = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(url);
		NodeList list =
			XPathAPI.selectNodeList(mDocument, "Envelope/Cube/Cube[@time='" + date + "']/Cube");

		for (int i = 0; i < list.getLength(); i++)
		{
			Node node = list.item(i);
			String currency = node.getAttributes().getNamedItem("currency").getNodeValue();
			String rate = node.getAttributes().getNamedItem("rate").getNodeValue();
			System.out.println("currency=" + currency + ", rate=" + rate);
		}
	}

	public static void main(String[] args) throws Exception
	{
		new ParseXML();
	}
}
```

> **AG skrev:**
>
> Har laddat hem Jdom nu, men måste erkänna att jag är en fullständig novis. Jag får det helt enkelt inte att fungera. Hur skall jag skapa jar-filen, och är det den som skall in i lib-katalogen?

Det är precis samma sak som när du kodar en vanlig applikation, för att få tillgång till det extra API du vill använda så måste jar filen komma med i classpathen.. och det gör den i detta fallet om du lägger den i lib katalogen.
Om du har laddat hem jdom så finns det antagligen en jar fil med där.

Permalänk: https://www.webforum.nu/p/1256037

---

Tråden på webben: https://www.webforum.nu/amne/java/95157-regex-xml
