# Upload xml file into elasticsearch

**URL:** <https://discuss.elastic.co/t/upload-xml-file-into-elasticsearch/162629>\
**Category:** Elasticsearch\
**Created:** [January 2, 2019, 10:05am UTC](https://discuss.elastic.co/t/upload-xml-file-into-elasticsearch/162629 "2019-01-02T10:05:08Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![Alaoui](https://avatars.discourse-cdn.com/v4/letter/a/4af34b/32.png) [@Alaoui](https://discuss.elastic.co/u/Alaoui)\
**Post date:** [January 2, 2019, 10:05am UTC](https://discuss.elastic.co/t/upload-xml-file-into-elasticsearch/162629/1 "2019-01-02T10:05:08Z")

</div>

Hi everyone,  
i want that logstash can groupe the data of each section of my xml file, what i should to modify on remove in my config file. for example i want my result like that :

```
 "_index": "logstash-xml",
    "_type": "xmlfiles",
    "_source": {
    "key1": 001
    "id": 001
    "date": 01-01-2016

    "_index": "logstash-xml",
    "_type": "xmlfiles",
    "_source": {
    "key1": 002
    "id": 002
    "date": 02-02-2016

```

This my config file :

```
 input {
 file {
 path => "D:\server\xmldata.xml"
 start_position => beginning
 codec => multiline
 {
  pattern => "^<\?xmldata .*\>"
  negate => true
  what => "previous"
 }
}
}

filter {
xml {
store_xml => false
source => "message"
xpath =>
[
"/xmldata/head1/id/text()", "id",
"/xmldata/head1/date/text()", "date",
"/xmldata/head1/key1/text()", "key1"
]
}

date {
match => ["date" , "dd-MM-yyyy HH:mm:ss"]
timezone => "Europe/Amsterdam"
}

}

output {
stdout { codec => rubydebug }
elasticsearch {
index => "logstash-xml"
hosts => ["localhost:9200"]
document_id => "%{[id]}"
document_type => "xmlfiles"
}
}

```

This is my xml file :

```
 <xmldata>
 <head1>
  <key1>Value1</key1>
  <id>0001</id>
  <date>01-01-2016 09:00:00</date>
 </head1>
 <head1>
  <key1>Value2</key1>
  <id>0002</id>
  <date>02-02-2016 02:00:00</date>
 </head1>
</xmldata>
```

---

<div class="post-metadata">

**Author:** ![balumurari1](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/balumurari1/32/39203_2.png) [@balumurari1](https://discuss.elastic.co/u/balumurari1)\
**Post date:** [January 2, 2019, 11:35am UTC](https://discuss.elastic.co/t/upload-xml-file-into-elasticsearch/162629/2 "2019-01-02T11:35:44Z")

</div>

Hello,

please find the sample example to load xml file [here](https://discuss.elastic.co/t/unable-to-load-xml-file-in-logstash/151318/5).

Hope this helps you

---

<div class="post-metadata">

**Author:** ![Alaoui](https://avatars.discourse-cdn.com/v4/letter/a/4af34b/32.png) [@Alaoui](https://discuss.elastic.co/u/Alaoui)\
**Post date:** [January 2, 2019, 1:38pm UTC](https://discuss.elastic.co/t/upload-xml-file-into-elasticsearch/162629/3 "2019-01-02T13:38:51Z")

</div>

> [@Alaoui](#):
>
> xmldata

Thanks but i got the same old resultat unfortunately .... ;(

---

<div class="post-metadata">

**Author:** ![balumurari1](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/balumurari1/32/39203_2.png) [@balumurari1](https://discuss.elastic.co/u/balumurari1)\
**Post date:** [January 3, 2019, 6:40am UTC](https://discuss.elastic.co/t/upload-xml-file-into-elasticsearch/162629/4 "2019-01-03T06:40:28Z")

</div>

Hello,

can you show me what changes you have applied to the input code. so that it would be easy to provide solution for you.

Regards

---

<div class="post-metadata">

**Author:** ![Alaoui](https://avatars.discourse-cdn.com/v4/letter/a/4af34b/32.png) [@Alaoui](https://discuss.elastic.co/u/Alaoui)\
**Post date:** [January 3, 2019, 8:39am UTC](https://discuss.elastic.co/t/upload-xml-file-into-elasticsearch/162629/5 "2019-01-03T08:39:59Z")

</div>

input {  
file {  
path =\> "D:\server\xmldata.xml"  
start\_position =\> beginning  
codec =\> multiline  
{  
pattern =\> "^\<?xmldata .\*\>"  
negate =\> true  
what =\> "previous"  
}  
}  
}

---

<div class="post-metadata">

**Author:** ![balumurari1](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/balumurari1/32/39203_2.png) [@balumurari1](https://discuss.elastic.co/u/balumurari1)\
**Post date:** [January 3, 2019, 8:42am UTC](https://discuss.elastic.co/t/upload-xml-file-into-elasticsearch/162629/6 "2019-01-03T08:42:42Z")

</div>

change path as shown below, please follow as shown in example properly

path =\> "D:/server/xmldata.xml"

---

<div class="post-metadata">

**Author:** ![Alaoui](https://avatars.discourse-cdn.com/v4/letter/a/4af34b/32.png) [@Alaoui](https://discuss.elastic.co/u/Alaoui)\
**Post date:** [January 3, 2019, 8:50am UTC](https://discuss.elastic.co/t/upload-xml-file-into-elasticsearch/162629/7 "2019-01-03T08:50:43Z")

</div>

i got the same result :

 ![image](https://us1.discourse-cdn.com/elastic/original/3X/f/3/f3a8a4dc9a9545e707583cd0d869bf536ea98d10.png)

---

<div class="post-metadata">

**Author:** ![Alaoui](https://avatars.discourse-cdn.com/v4/letter/a/4af34b/32.png) [@Alaoui](https://discuss.elastic.co/u/Alaoui)\
**Post date:** [January 3, 2019, 8:53am UTC](https://discuss.elastic.co/t/upload-xml-file-into-elasticsearch/162629/8 "2019-01-03T08:53:31Z")

</div>

it s better if i can groupe data of each section like in this image

 ![image](https://us1.discourse-cdn.com/elastic/original/3X/1/d/1d8f7a8491c60228212239eba2dfba907221f386.png)

---

<div class="post-metadata">

**Author:** ![Christian\_Dahlqvist](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/christian_dahlqvist/32/4617_2.png) [@Christian\_Dahlqvist](https://discuss.elastic.co/u/Christian_Dahlqvist)\
**Post date:** [January 3, 2019, 9:05am UTC](https://discuss.elastic.co/t/upload-xml-file-into-elasticsearch/162629/9 "2019-01-03T09:05:59Z")

</div>

Are you looking for something like this?

```auto
input {
  generator {
    lines => ['<xmldata>
 <head1>
  <key1>Value1</key1>
  <id>0001</id>
  <date>01-01-2016 09:00:00</date>
 </head1>
 <head1>
  <key1>Value2</key1>
  <id>0002</id>
  <date>02-02-2016 02:00:00</date>
 </head1>
</xmldata>']
    count => 1
  } 
} 

filter {
  xml {
    source => "message"
    target => "data"
  }

  split {
    field => "[data][head1]"
  }

  mutate {
    add_field => { "key1" => "%{[data][head1][key1][0]}"
                   "id" => "%{[data][head1][id][0]}"
                   "date" => "%{[data][head1][date][0]}"
                 }
  }

  mutate {
    remove_field => ["data", "message"]
  }
}

output {
  stdout { codec => rubydebug }
}

```

---

<div class="post-metadata">

**Author:** ![Alaoui](https://avatars.discourse-cdn.com/v4/letter/a/4af34b/32.png) [@Alaoui](https://discuss.elastic.co/u/Alaoui)\
**Post date:** [January 3, 2019, 9:12am UTC](https://discuss.elastic.co/t/upload-xml-file-into-elasticsearch/162629/10 "2019-01-03T09:12:40Z")

</div>

Thanks a lot its work like i want

---

<div class="post-metadata">

**Author:** ![Alaoui](https://avatars.discourse-cdn.com/v4/letter/a/4af34b/32.png) [@Alaoui](https://discuss.elastic.co/u/Alaoui)\
**Post date:** [January 3, 2019, 9:38am UTC](https://discuss.elastic.co/t/upload-xml-file-into-elasticsearch/162629/11 "2019-01-03T09:38:45Z")

</div>

and what i should to do if i dont want to paste all xml file in the generator for example replace this code :  
 ![image](https://us1.discourse-cdn.com/elastic/original/3X/7/f/7f6aa8cb2a35ce9781136ed772877079ca5c0a4d.png)

with this new code ;

![image](https://us1.discourse-cdn.com/elastic/original/3X/8/d/8d9c1aaed84c13d62ccbd1e17b5f1479965c15df.png)

but it doesnt work ☹ @Christian_Dahlqvist@balumurari1

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [January 31, 2019, 9:38am UTC](https://discuss.elastic.co/t/upload-xml-file-into-elasticsearch/162629/12 "2019-01-31T09:38:49Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
