{"id":67,"date":"2010-05-19T21:16:00","date_gmt":"2010-05-19T19:16:00","guid":{"rendered":"http:\/\/dev.bratched.fr\/en\/?p=67"},"modified":"2010-05-19T21:16:00","modified_gmt":"2010-05-19T19:16:00","slug":"linq-to-xml-and-reading-large-xml-files","status":"publish","type":"post","link":"https:\/\/bratched.com\/en\/2010\/05\/19\/linq-to-xml-and-reading-large-xml-files\/","title":{"rendered":"LINQ to XML and reading large XML files"},"content":{"rendered":"<p>LINQ to XML makes it relatively easy to read and query XML files. For example consider the following XML file:<\/p>\n<div id=\"scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:d26a3848-6354-42e0-a1c8-a4a22f0786b5\" class=\"wlWriterSmartContent\" style=\"margin: 0px;padding: 0px;float: none\">\n<pre class=\"lang:default decode:true crayon-selected\">&lt;xml version=\"1.0\" encoding=\"utf-8\" ?&gt;\n    &lt;users&gt;\n        &lt;user name=\"User1\" groupid=\"4\" \/&gt;\n        &lt;user name=\"User2\" groupid=\"1\" \/&gt;\n        &lt;user name=\"User3\" groupid=\"3\" \/&gt;\n        &lt;user name=\"User4\" groupid=\"1\" \/&gt;\n        &lt;user name=\"User5\" groupid=\"1\" \/&gt;\n        &lt;user name=\"User6\" groupid=\"2\" \/&gt;\n        &lt;user name=\"User7\" groupid=\"1\" \/&gt;\n    &lt;\/users&gt;<\/pre>\n<\/div>\n<p>Suppose you would like to find all records with <em>groupid &gt; 2. <\/em>You could be tempted to issue the following query:<\/p>\n<div id=\"scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:ebdcda5f-b4d9-450b-a917-932fb91b2ca8\" class=\"wlWriterSmartContent\" style=\"margin: 0px;padding: 0px;float: none\">\n<pre class=\"lang:default decode:true\">XElement doc = XElement.Load(\"users.xml\");\n    var users = from u in doc.Elements(\"user\")\n                where u.Attribute(\"groupid\") != null &amp;&amp;\n                int.Parse(u.Attribute(\"groupid\").Value) &gt; 2\n                select u;\n    Console.WriteLine(\"{0} users match query\", users.Count());<\/pre>\n<\/div>\n<p>There\u2019s a flaw in this method. <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/system.xml.linq.xelement.load.aspx\" rel=\"nofollow\">XElement.Load<\/a> method will load the whole XML file in memory and if this file is quite big, <!--more-->not only the query might take long time to execute but it might fail running out of memory. If we had some really large XML files we need to buffer through it instead of reading the whole contents into memory. <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/system.xml.xmlreader.aspx\" rel=\"nofollow\">XmlReader<\/a> is a nice alternative to allowing us to have only the current record into memory which could hugely improve performance. We start by defining a <em>User<\/em> class which will be used to represent a single record:<\/p>\n<div id=\"scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:cf66f4c3-5956-4f90-b501-418f51d3926c\" class=\"wlWriterSmartContent\" style=\"margin: 0px;padding: 0px;float: none\">\n<pre class=\"lang:default decode:true\">public class User \n    {\n        public string Name { get; set; }\n        public int GroupId { get; set; }\n    }<\/pre>\n<\/div>\n<p>Next we extend the <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/system.xml.xmlreader.aspx\" rel=\"nofollow\">XmlReader<\/a> class with the User method:<\/p>\n<div id=\"scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:534be24b-59a4-41a8-bce2-4b9b62a2a6b1\" class=\"wlWriterSmartContent\" style=\"margin: 0px;padding: 0px;float: none\">\n<pre class=\"lang:default decode:true\">public static IEnumerable&lt;User&gt; Users(this XmlReader source)\n    {\n        while (source.Read())\n        {\n            if (source.NodeType == XmlNodeType.Element &amp;&amp; \n                source.Name == \"user\")\n            {\n                int groupId;\n                int.TryParse(source.GetAttribute(\"groupid\"), out groupId);\n                yield return new User\n                {\n                    GroupId = groupId,\n                    Name = source.GetAttribute(\"name\")\n                };\n            }\n        }\n    }<\/pre>\n<\/div>\n<p>And finally we can execute the query:<\/p>\n<div id=\"scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:15625cdc-4aa2-4224-99c1-9f9cd8ad2553\" class=\"wlWriterSmartContent\" style=\"margin: 0px;padding: 0px;float: none\">\n<pre class=\"lang:default decode:true\">using (XmlReader reader = XmlReader.Create(\"users.xml\"))\n    {\n        var users = from u in reader.Users()\n                    where u.GroupId &gt; 2\n                    select u;\n        Console.WriteLine(\"{0} users match query\", users.Count());\n    }<\/pre>\n<\/div>\n<p>Conclusion: the second approach runs faster and uses much less memory than the first. The difference is noticeable on large XML files. So if you have to deal with large XML files be cautious when using LINQ to XML.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>LINQ to XML makes it relatively easy to read and query XML files. For example consider the following XML file: &lt;xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243; ?&gt; &lt;users&gt; &lt;user name=&#8221;User1&#8243; groupid=&#8221;4&#8243; \/&gt; &lt;user name=&#8221;User2&#8243; groupid=&#8221;1&#8243; \/&gt; &lt;user name=&#8221;User3&#8243; groupid=&#8221;3&#8243; \/&gt; &lt;user name=&#8221;User4&#8243; groupid=&#8221;1&#8243; \/&gt; &lt;user name=&#8221;User5&#8243; groupid=&#8221;1&#8243; \/&gt; &lt;user name=&#8221;User6&#8243; groupid=&#8221;2&#8243; \/&gt; &lt;user name=&#8221;User7&#8243; groupid=&#8221;1&#8243; \/&gt; &lt;\/users&gt; Suppose [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[263,266],"tags":[284,328],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.0.1 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Bratched\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/bratched.com\/en\/2010\/05\/19\/linq-to-xml-and-reading-large-xml-files\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Bratched.com | Blog speaking .Net C# Javascript, Wordpress\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"LINQ to XML and reading large XML files | Bratched.com\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/bratched.com\/en\/2010\/05\/19\/linq-to-xml-and-reading-large-xml-files\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2010-05-19T19:16:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2010-05-19T19:16:00+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"LINQ to XML and reading large XML files | Bratched.com\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/bratched.com\\\/en\\\/2010\\\/05\\\/19\\\/linq-to-xml-and-reading-large-xml-files\\\/#article\",\"name\":\"LINQ to XML and reading large XML files | Bratched.com\",\"headline\":\"LINQ to XML and reading large XML files\",\"author\":{\"@id\":\"https:\\\/\\\/bratched.com\\\/en\\\/author\\\/adminced\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/bratched.com\\\/en\\\/#organization\"},\"datePublished\":\"2010-05-19T21:16:00+02:00\",\"dateModified\":\"2010-05-19T21:16:00+02:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/bratched.com\\\/en\\\/2010\\\/05\\\/19\\\/linq-to-xml-and-reading-large-xml-files\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/bratched.com\\\/en\\\/2010\\\/05\\\/19\\\/linq-to-xml-and-reading-large-xml-files\\\/#webpage\"},\"articleSection\":\".NET, C#, dotnet, xml\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/bratched.com\\\/en\\\/2010\\\/05\\\/19\\\/linq-to-xml-and-reading-large-xml-files\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bratched.com\\\/en#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/bratched.com\\\/en\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bratched.com\\\/en\\\/category\\\/net\\\/#listItem\",\"name\":\".NET\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bratched.com\\\/en\\\/category\\\/net\\\/#listItem\",\"position\":2,\"name\":\".NET\",\"item\":\"https:\\\/\\\/bratched.com\\\/en\\\/category\\\/net\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bratched.com\\\/en\\\/category\\\/net\\\/c\\\/#listItem\",\"name\":\"C#\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bratched.com\\\/en#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bratched.com\\\/en\\\/category\\\/net\\\/c\\\/#listItem\",\"position\":3,\"name\":\"C#\",\"item\":\"https:\\\/\\\/bratched.com\\\/en\\\/category\\\/net\\\/c\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bratched.com\\\/en\\\/2010\\\/05\\\/19\\\/linq-to-xml-and-reading-large-xml-files\\\/#listItem\",\"name\":\"LINQ to XML and reading large XML files\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bratched.com\\\/en\\\/category\\\/net\\\/#listItem\",\"name\":\".NET\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bratched.com\\\/en\\\/2010\\\/05\\\/19\\\/linq-to-xml-and-reading-large-xml-files\\\/#listItem\",\"position\":4,\"name\":\"LINQ to XML and reading large XML files\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bratched.com\\\/en\\\/category\\\/net\\\/c\\\/#listItem\",\"name\":\"C#\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/bratched.com\\\/en\\\/#organization\",\"name\":\"Bratched.com\",\"description\":\"Blog speaking .Net C# Javascript, Wordpress\",\"url\":\"https:\\\/\\\/bratched.com\\\/en\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/bratched.com\\\/en\\\/author\\\/adminced\\\/#author\",\"url\":\"https:\\\/\\\/bratched.com\\\/en\\\/author\\\/adminced\\\/\",\"name\":\"Bratched\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/bratched.com\\\/en\\\/2010\\\/05\\\/19\\\/linq-to-xml-and-reading-large-xml-files\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/05352dcd40ece2c42e5ae2dd683b460b?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Bratched\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/bratched.com\\\/en\\\/2010\\\/05\\\/19\\\/linq-to-xml-and-reading-large-xml-files\\\/#webpage\",\"url\":\"https:\\\/\\\/bratched.com\\\/en\\\/2010\\\/05\\\/19\\\/linq-to-xml-and-reading-large-xml-files\\\/\",\"name\":\"LINQ to XML and reading large XML files | Bratched.com\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/bratched.com\\\/en\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/bratched.com\\\/en\\\/2010\\\/05\\\/19\\\/linq-to-xml-and-reading-large-xml-files\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/bratched.com\\\/en\\\/author\\\/adminced\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/bratched.com\\\/en\\\/author\\\/adminced\\\/#author\"},\"datePublished\":\"2010-05-19T21:16:00+02:00\",\"dateModified\":\"2010-05-19T21:16:00+02:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/bratched.com\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/bratched.com\\\/en\\\/\",\"name\":\"Bratched.com\",\"description\":\"Blog speaking .Net C# Javascript, Wordpress\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/bratched.com\\\/en\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"LINQ to XML and reading large XML files | Bratched.com","description":"","canonical_url":"https:\/\/bratched.com\/en\/2010\/05\/19\/linq-to-xml-and-reading-large-xml-files\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/bratched.com\/en\/2010\/05\/19\/linq-to-xml-and-reading-large-xml-files\/#article","name":"LINQ to XML and reading large XML files | Bratched.com","headline":"LINQ to XML and reading large XML files","author":{"@id":"https:\/\/bratched.com\/en\/author\/adminced\/#author"},"publisher":{"@id":"https:\/\/bratched.com\/en\/#organization"},"datePublished":"2010-05-19T21:16:00+02:00","dateModified":"2010-05-19T21:16:00+02:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/bratched.com\/en\/2010\/05\/19\/linq-to-xml-and-reading-large-xml-files\/#webpage"},"isPartOf":{"@id":"https:\/\/bratched.com\/en\/2010\/05\/19\/linq-to-xml-and-reading-large-xml-files\/#webpage"},"articleSection":".NET, C#, dotnet, xml"},{"@type":"BreadcrumbList","@id":"https:\/\/bratched.com\/en\/2010\/05\/19\/linq-to-xml-and-reading-large-xml-files\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/bratched.com\/en#listItem","position":1,"name":"Home","item":"https:\/\/bratched.com\/en","nextItem":{"@type":"ListItem","@id":"https:\/\/bratched.com\/en\/category\/net\/#listItem","name":".NET"}},{"@type":"ListItem","@id":"https:\/\/bratched.com\/en\/category\/net\/#listItem","position":2,"name":".NET","item":"https:\/\/bratched.com\/en\/category\/net\/","nextItem":{"@type":"ListItem","@id":"https:\/\/bratched.com\/en\/category\/net\/c\/#listItem","name":"C#"},"previousItem":{"@type":"ListItem","@id":"https:\/\/bratched.com\/en#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/bratched.com\/en\/category\/net\/c\/#listItem","position":3,"name":"C#","item":"https:\/\/bratched.com\/en\/category\/net\/c\/","nextItem":{"@type":"ListItem","@id":"https:\/\/bratched.com\/en\/2010\/05\/19\/linq-to-xml-and-reading-large-xml-files\/#listItem","name":"LINQ to XML and reading large XML files"},"previousItem":{"@type":"ListItem","@id":"https:\/\/bratched.com\/en\/category\/net\/#listItem","name":".NET"}},{"@type":"ListItem","@id":"https:\/\/bratched.com\/en\/2010\/05\/19\/linq-to-xml-and-reading-large-xml-files\/#listItem","position":4,"name":"LINQ to XML and reading large XML files","previousItem":{"@type":"ListItem","@id":"https:\/\/bratched.com\/en\/category\/net\/c\/#listItem","name":"C#"}}]},{"@type":"Organization","@id":"https:\/\/bratched.com\/en\/#organization","name":"Bratched.com","description":"Blog speaking .Net C# Javascript, Wordpress","url":"https:\/\/bratched.com\/en\/"},{"@type":"Person","@id":"https:\/\/bratched.com\/en\/author\/adminced\/#author","url":"https:\/\/bratched.com\/en\/author\/adminced\/","name":"Bratched","image":{"@type":"ImageObject","@id":"https:\/\/bratched.com\/en\/2010\/05\/19\/linq-to-xml-and-reading-large-xml-files\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/05352dcd40ece2c42e5ae2dd683b460b?s=96&d=mm&r=g","width":96,"height":96,"caption":"Bratched"}},{"@type":"WebPage","@id":"https:\/\/bratched.com\/en\/2010\/05\/19\/linq-to-xml-and-reading-large-xml-files\/#webpage","url":"https:\/\/bratched.com\/en\/2010\/05\/19\/linq-to-xml-and-reading-large-xml-files\/","name":"LINQ to XML and reading large XML files | Bratched.com","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/bratched.com\/en\/#website"},"breadcrumb":{"@id":"https:\/\/bratched.com\/en\/2010\/05\/19\/linq-to-xml-and-reading-large-xml-files\/#breadcrumblist"},"author":{"@id":"https:\/\/bratched.com\/en\/author\/adminced\/#author"},"creator":{"@id":"https:\/\/bratched.com\/en\/author\/adminced\/#author"},"datePublished":"2010-05-19T21:16:00+02:00","dateModified":"2010-05-19T21:16:00+02:00"},{"@type":"WebSite","@id":"https:\/\/bratched.com\/en\/#website","url":"https:\/\/bratched.com\/en\/","name":"Bratched.com","description":"Blog speaking .Net C# Javascript, Wordpress","inLanguage":"en-US","publisher":{"@id":"https:\/\/bratched.com\/en\/#organization"}}]},"og:locale":"en_US","og:site_name":"Bratched.com | Blog speaking .Net C# Javascript, Wordpress","og:type":"article","og:title":"LINQ to XML and reading large XML files | Bratched.com","og:url":"https:\/\/bratched.com\/en\/2010\/05\/19\/linq-to-xml-and-reading-large-xml-files\/","article:published_time":"2010-05-19T19:16:00+00:00","article:modified_time":"2010-05-19T19:16:00+00:00","twitter:card":"summary","twitter:title":"LINQ to XML and reading large XML files | Bratched.com"},"aioseo_meta_data":{"post_id":"67","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"location":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2020-12-21 02:36:46","updated":"2025-06-04 02:52:38","seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/bratched.com\/en\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/bratched.com\/en\/category\/net\/\" title=\".NET\">.NET<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/bratched.com\/en\/category\/net\/c\/\" title=\"C#\">C#<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tLINQ to XML and reading large XML files\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/bratched.com\/en"},{"label":".NET","link":"https:\/\/bratched.com\/en\/category\/net\/"},{"label":"C#","link":"https:\/\/bratched.com\/en\/category\/net\/c\/"},{"label":"LINQ to XML and reading large XML files","link":"https:\/\/bratched.com\/en\/2010\/05\/19\/linq-to-xml-and-reading-large-xml-files\/"}],"_links":{"self":[{"href":"https:\/\/bratched.com\/en\/wp-json\/wp\/v2\/posts\/67"}],"collection":[{"href":"https:\/\/bratched.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bratched.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bratched.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bratched.com\/en\/wp-json\/wp\/v2\/comments?post=67"}],"version-history":[{"count":0,"href":"https:\/\/bratched.com\/en\/wp-json\/wp\/v2\/posts\/67\/revisions"}],"wp:attachment":[{"href":"https:\/\/bratched.com\/en\/wp-json\/wp\/v2\/media?parent=67"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bratched.com\/en\/wp-json\/wp\/v2\/categories?post=67"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bratched.com\/en\/wp-json\/wp\/v2\/tags?post=67"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}