<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: XYZ question in Revit API Forum</title>
    <link>https://forums.autodesk.com/t5/revit-api-forum/xyz-question/m-p/6464542#M63839</link>
    <description>You're right, the XYZ class can represent a point or a vector, which are in fact quite similar.&lt;BR /&gt;&lt;BR /&gt;If you have a XYZ object and run a angle method, you're in fact handling a vector information... but if you just get a coordinate, then a point.&lt;BR /&gt;&lt;BR /&gt;Finally a vector don't have start or end point as they represent a direction, not a line. If you need a line, use the Curve/Line object.</description>
    <pubDate>Thu, 28 Jul 2016 12:54:27 GMT</pubDate>
    <dc:creator>augusto.goncalves</dc:creator>
    <dc:date>2016-07-28T12:54:27Z</dc:date>
    <item>
      <title>XYZ question</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/xyz-question/m-p/6460982#M63838</link>
      <description>&lt;P&gt;Hi all&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I find the XYZ class very confusing because it can be a point or a vector.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Does any body knows any good guide on how to use them? Or some documentation.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Also, I have a specific question, how does one extract start and end points of a XYZ vector?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;</description>
      <pubDate>Tue, 26 Jul 2016 20:55:59 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/xyz-question/m-p/6460982#M63838</guid>
      <dc:creator>MGO-Norsyn</dc:creator>
      <dc:date>2016-07-26T20:55:59Z</dc:date>
    </item>
    <item>
      <title>Re: XYZ question</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/xyz-question/m-p/6464542#M63839</link>
      <description>You're right, the XYZ class can represent a point or a vector, which are in fact quite similar.&lt;BR /&gt;&lt;BR /&gt;If you have a XYZ object and run a angle method, you're in fact handling a vector information... but if you just get a coordinate, then a point.&lt;BR /&gt;&lt;BR /&gt;Finally a vector don't have start or end point as they represent a direction, not a line. If you need a line, use the Curve/Line object.</description>
      <pubDate>Thu, 28 Jul 2016 12:54:27 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/xyz-question/m-p/6464542#M63839</guid>
      <dc:creator>augusto.goncalves</dc:creator>
      <dc:date>2016-07-28T12:54:27Z</dc:date>
    </item>
    <item>
      <title>Re: XYZ question</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/xyz-question/m-p/6467908#M63840</link>
      <description>I suggest rolling your own Point and Vector wrappers around it. It will make your code much easier to maintain.</description>
      <pubDate>Fri, 29 Jul 2016 19:57:49 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/xyz-question/m-p/6467908#M63840</guid>
      <dc:creator>BobbyC.Jones</dc:creator>
      <dc:date>2016-07-29T19:57:49Z</dc:date>
    </item>
    <item>
      <title>Re: XYZ question</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/xyz-question/m-p/6476726#M63841</link>
      <description>Thats very interesting. Could you provide a little example?</description>
      <pubDate>Wed, 03 Aug 2016 20:06:15 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/xyz-question/m-p/6476726#M63841</guid>
      <dc:creator>MGO-Norsyn</dc:creator>
      <dc:date>2016-08-03T20:06:15Z</dc:date>
    </item>
    <item>
      <title>Re: XYZ question</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/xyz-question/m-p/6477069#M63842</link>
      <description>&lt;P&gt;The XYZ class defines methods that are specific to the concept of points and vectors. &amp;nbsp;The biggest problem I had was in reviewing our code; it was difficult to know&amp;nbsp;which concept it was dealing with at any given time.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Another benefit of&amp;nbsp;providing your own point and vector wrappers&amp;nbsp;is that you can limit their interface to only methods that make sense. &amp;nbsp;All of this code compiles, but none of it makes any sense.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;public static void PointAndVectorExample(Line revitLine)
{
    var lineOrigin = revitLine.Origin;
    var whatIstheLengthOfaPoint = lineOrigin.GetLength();
    var howIsaPointaUnitLength = lineOrigin.IsUnitLength();

    var lineDirection = revitLine.Direction;
    var whatDoesThisRepresent = lineDirection.CrossProduct(lineOrigin);
    var thisDoesntMakeSense = lineDirection.DistanceTo(lineOrigin);
}&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Here are some PARTIAL Point3D and Vector3D classes to give you the idea. &amp;nbsp;And some helper extensions to make using them easier to use. &amp;nbsp;You can take these and wrap the appropriate XYZ methods for each as well as define additional methods of your own. &amp;nbsp;And even implement additional interfaces, such as IEquatable.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;public class Point3D
{
    public Point3D(XYZ revitXyz)
    {
        XYZ = revitXyz;
    }

    public Point3D() : this(XYZ.Zero)
    {}

    public Point3D(double x, double y, double z) : this(new XYZ(x, y, z))
    {}

    public XYZ XYZ { get; private set; }

    public double X =&amp;gt; XYZ.X;
    public double Y =&amp;gt; XYZ.Y;
    public double Z =&amp;gt; XYZ.Z;

    public double DistanceTo(Point3D source)
    {
        return XYZ.DistanceTo(source.XYZ);
    }

    public Point3D Add(Vector3D source)
    {
        return new Point3D(XYZ.Add(source.XYZ));
    }

    public static Point3D operator +(Point3D point, Vector3D vector)
    {
        return point.Add(vector);
    }

    public override string ToString()
    {
        return XYZ.ToString();
    }

    public static Point3D Zero =&amp;gt; new Point3D(XYZ.Zero);
}&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;public class Vector3D
{
    public Vector3D(XYZ revitXyz)
    {
        XYZ = revitXyz;
    }

    public Vector3D() : this(XYZ.Zero)
    {}

    public Vector3D(double x, double y, double z)  : this(new XYZ(x, y, z))
    {}

    public XYZ XYZ { get; private set; }

    public double X =&amp;gt; XYZ.X;
    public double Y =&amp;gt; XYZ.Y;
    public double Z =&amp;gt; XYZ.Z;

    public Vector3D CrossProduct(Vector3D source)
    {
        return new Vector3D(XYZ.CrossProduct(source.XYZ));
    }
        
    public double GetLength()
    {
        return XYZ.GetLength();
    }

    public override string ToString()
    {
        return XYZ.ToString();
    }

    public static Vector3D BasisX =&amp;gt; new Vector3D(XYZ.BasisX);
    public static Vector3D BasisY =&amp;gt; new Vector3D(XYZ.BasisY);
    public static Vector3D BasisZ =&amp;gt; new Vector3D(XYZ.BasisZ);
}&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;public static class XYZExtensions
{
    public static Point3D ToPoint3D(this XYZ revitXyz)
    {
        return new Point3D(revitXyz);
    }

    public static Vector3D ToVector3D(this XYZ revitXyz)
    {
        return new Vector3D(revitXyz);
    }
}&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;public static class LineExtensions
{
    public static Vector3D Direction(this Line revitLine)
    {
        return new Vector3D(revitLine.Direction);
    }

    public static Point3D Origin(this Line revitLine)
    {
        return new Point3D(revitLine.Origin);
    }
}&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 03 Aug 2016 22:56:06 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/xyz-question/m-p/6477069#M63842</guid>
      <dc:creator>BobbyC.Jones</dc:creator>
      <dc:date>2016-08-03T22:56:06Z</dc:date>
    </item>
    <item>
      <title>Re: XYZ question</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/xyz-question/m-p/6477640#M63843</link>
      <description>Thank you. There's some stuff I'll have to learn. &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;</description>
      <pubDate>Thu, 04 Aug 2016 07:55:37 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/xyz-question/m-p/6477640#M63843</guid>
      <dc:creator>MGO-Norsyn</dc:creator>
      <dc:date>2016-08-04T07:55:37Z</dc:date>
    </item>
    <item>
      <title>Re: XYZ question</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/xyz-question/m-p/6478235#M63844</link>
      <description>&lt;P&gt;Ha! &amp;nbsp;Don't we all have much to learn; I certainly do! &amp;nbsp;You're very welcome and I hope this helped get you started. &amp;nbsp;And don't hesitate to ask if you have any more questions.&lt;/P&gt;</description>
      <pubDate>Thu, 04 Aug 2016 13:20:09 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/xyz-question/m-p/6478235#M63844</guid>
      <dc:creator>BobbyC.Jones</dc:creator>
      <dc:date>2016-08-04T13:20:09Z</dc:date>
    </item>
    <item>
      <title>Re: XYZ question</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/xyz-question/m-p/7318379#M63845</link>
      <description>&lt;P&gt;Edited and summarised for posterity:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://thebuildingcoder.typepad.com/blog/2017/08/birthday-post-on-the-xyz-class.html" target="_blank"&gt;http://thebuildingcoder.typepad.com/blog/2017/08/birthday-post-on-the-xyz-class.html&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Cheers,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Jeremy&lt;/P&gt;</description>
      <pubDate>Tue, 22 Aug 2017 09:52:38 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/xyz-question/m-p/7318379#M63845</guid>
      <dc:creator>jeremytammik</dc:creator>
      <dc:date>2017-08-22T09:52:38Z</dc:date>
    </item>
    <item>
      <title>Re: XYZ question</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/xyz-question/m-p/7326952#M63846</link>
      <description>&lt;P&gt;Hi Jeremy,&lt;/P&gt;
&lt;P&gt;Very cool! &amp;nbsp;In looking over that code I noticed a call to&amp;nbsp;an extension method that I did not supply. &amp;nbsp;For completeness sake:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;public static class DoubleExtensions
{&lt;BR /&gt;    private const double Tolerance = 1.0e-10;&lt;BR /&gt;
    public static bool IsAlmostEqualTo(this double double1, double double2)
    {&lt;BR /&gt;        var isAlmostEqual = Math.Abs(double1 - double2) &amp;lt;= Tolerance;&lt;BR /&gt;&lt;BR /&gt;        return isAlmostEqual;
    }&lt;BR /&gt;}&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 24 Aug 2017 19:28:44 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/xyz-question/m-p/7326952#M63846</guid>
      <dc:creator>BobbyC.Jones</dc:creator>
      <dc:date>2017-08-24T19:28:44Z</dc:date>
    </item>
    <item>
      <title>Re: XYZ question</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/xyz-question/m-p/7328358#M63847</link>
      <description>&lt;P&gt;Thank you!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Added to the post.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Cheers,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Jeremy&lt;/P&gt;</description>
      <pubDate>Fri, 25 Aug 2017 09:41:48 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/xyz-question/m-p/7328358#M63847</guid>
      <dc:creator>jeremytammik</dc:creator>
      <dc:date>2017-08-25T09:41:48Z</dc:date>
    </item>
    <item>
      <title>Re: XYZ question</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/xyz-question/m-p/8442327#M63848</link>
      <description>&lt;P&gt;Thank you very much for help on this topic. I've finally come around to implement the ConnectorXYZComparer in my codez and, while developing a new utility which at one point seeks to find distinct pipe connectors based on location in space by comparing Connector.Origin which is a XYZ, I have discovered that some connectors can have a much larger tolerance than the 1.0e-9 which is used in the BuildingCoder samples and utils.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In my test set, which is around 800 connectors, I got 32 false negatives. The largest delta is at 0.0004... ft. See the attached text file for my test results. So the HashString method from the ConnectorXYZComparer, which writes the coordinates to 9th decimal place returns slightly different hashstrings for connectors at the same location, but with large deltas. Also the Equals method operating with 1.0e-9 tolerance is returning false negatives.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;So anybody using the Comparer provided by Jeremy is going to have some false negatives and wrong results when working with XYZs from MEP connectors.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;To fix this I had to up the tolerance on the Equals method to 0.00328 ft -&amp;gt; roughly 1 mm, which is okay, because I will never have two distinct groups of connectors at distances lower than 1 mm, and I could probably have set it even higher safely.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Second part is that the hash string has to have only two decimals or else I was getting with four decimals:&lt;/P&gt;
&lt;P&gt;(13.6971,19.1862,11.0728)&lt;BR /&gt;(13.6971,19.1866,11.0728)&lt;/P&gt;
&lt;P&gt;And with three decimals:&lt;/P&gt;
&lt;P&gt;(13.697,19.186,11.073)&lt;BR /&gt;(13.697,19.187,11.073)&lt;/P&gt;
&lt;P&gt;I *HOPE* that two decimals is enough to cover the wildest imaginable tolerance for Revit piping Connectors...&lt;/P&gt;</description>
      <pubDate>Mon, 03 Dec 2018 22:06:39 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/xyz-question/m-p/8442327#M63848</guid>
      <dc:creator>MGO-Norsyn</dc:creator>
      <dc:date>2018-12-03T22:06:39Z</dc:date>
    </item>
    <item>
      <title>Re: XYZ question</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/xyz-question/m-p/8443051#M63849</link>
      <description>&lt;P&gt;&lt;SPAN&gt;Dear Mgo,&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Thank you for your update, research and results.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;I agree that 1 mm is a sensible threshold to use.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;In fact, I often an integer-based coordinate system by rounding every single coordinate value to the closest millimetre when processing Revit models:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN&gt;Revit 2014 API and Room Plan View Boundary Loops -- &lt;A href="http://thebuildingcoder.typepad.com/blog/2013/03/revit-2014-api-and-room-plan-view-boundary-polygon-loops.html" target="_blank"&gt;http://thebuildingcoder.typepad.com/blog/2013/03/revit-2014-api-and-room-plan-view-boundary-polygon-loops.html&lt;/A&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;Extrusion Analyser and Plan View Boundaries -- &lt;A href="http://thebuildingcoder.typepad.com/blog/2013/04/extrusion-analyser-and-plan-view-boundaries.html" target="_blank"&gt;http://thebuildingcoder.typepad.com/blog/2013/04/extrusion-analyser-and-plan-view-boundaries.html&lt;/A&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;Curve Following Face and Bounding Box Implementation -- &lt;A href="http://thebuildingcoder.typepad.com/blog/2013/04/curve-following-face-and-bounding-box-implementation.html" target="_blank"&gt;http://thebuildingcoder.typepad.com/blog/2013/04/curve-following-face-and-bounding-box-implementation.html&lt;/A&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;GeoSnoop .NET Boundary Curve Loop Visualisation -- &lt;A href="http://thebuildingcoder.typepad.com/blog/2013/04/geosnoop-net-boundary-curve-loop-visualisation.html" target="_blank"&gt;http://thebuildingcoder.typepad.com/blog/2013/04/geosnoop-net-boundary-curve-loop-visualisation.html&lt;/A&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;Desktop to Cloud via DreamSeat CouchDB Client -- &lt;A href="http://thebuildingcoder.typepad.com/blog/2013/04/desktop-to-cloud-via-dreamseat-couchdb-client.html" target="_blank"&gt;http://thebuildingcoder.typepad.com/blog/2013/04/desktop-to-cloud-via-dreamseat-couchdb-client.html&lt;/A&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;Room and Furniture Loops Using Symbols -- &lt;A href="http://thebuildingcoder.typepad.com/blog/2013/04/room-and-furniture-loops-using-symbols.html" target="_blank"&gt;http://thebuildingcoder.typepad.com/blog/2013/04/room-and-furniture-loops-using-symbols.html&lt;/A&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;RoomEditorApp Architecture and External Application -- &lt;A href="http://thebuildingcoder.typepad.com/blog/2013/11/roomeditorapp-architecture-and-external-application.html" target="_blank"&gt;http://thebuildingcoder.typepad.com/blog/2013/11/roomeditorapp-architecture-and-external-application.html&lt;/A&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;Profiling Revit Add-ins and RoomEditorApp Enhancements -- &lt;A href="http://thebuildingcoder.typepad.com/blog/2014/04/profiling-revit-add-ins-and-roomeditorapp-enhancements.html" target="_blank"&gt;http://thebuildingcoder.typepad.com/blog/2014/04/profiling-revit-add-ins-and-roomeditorapp-enhancements.html&lt;/A&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;Determining the Size and Location of Viewports on a Sheet -- &lt;A href="http://thebuildingcoder.typepad.com/blog/2014/04/determining-the-size-and-location-of-viewports-on-a-sheet.html" target="_blank"&gt;http://thebuildingcoder.typepad.com/blog/2014/04/determining-the-size-and-location-of-viewports-on-a-sheet.html&lt;/A&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Best regards,&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Jeremy&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 04 Dec 2018 08:25:35 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/xyz-question/m-p/8443051#M63849</guid>
      <dc:creator>jeremytammik</dc:creator>
      <dc:date>2018-12-04T08:25:35Z</dc:date>
    </item>
  </channel>
</rss>

