lijunle / Vsxmd

VS XML documentation -> Markdown syntax.
MIT License
216 stars 51 forks source link

Crash #18

Closed aguarino77 closed 8 years ago

aguarino77 commented 8 years ago

Crash with the following XML

<?xml version="1.0"?>
<doc>
    <assembly>
        <name>HTRINet</name>
    </assembly>
    <members>
        <member name="T:HTRINet.CHeatReleaseCurve">
            <summary>
            Wrapper class for the heat release curve
            it refers to an isobaric curve
            </summary>
        </member>
        <member name="M:HTRINet.CHeatReleaseCurve.#ctor">
            <summary>
            Default constructor
            </summary>
        </member>
        <member name="M:HTRINet.CHeatReleaseCurve.#ctor(HTRICalc.HeatReleaseCurve)">
            <summary>
            Reads an existing HTRI curve and constructs the object
            </summary>
            <param name="curve"></param>
        </member>
        <member name="M:HTRINet.CHeatReleaseCurve.ToHTRI(HTRICalc.HeatReleaseCurve)">
            <summary>
            Exports the curve data to the HTRI curve object
            </summary>
            <param name="curve"></param>
        </member>
        <member name="M:HTRINet.CHeatReleaseCurve.ReadHTRICurvePressure(HTRICalc.HeatReleaseCurve)">
            <summary>
            Reads the pressure of a HTRI curve by taking the first point
            </summary>
            <param name="hc"></param>
            <returns></returns>
        </member>
        <member name="P:HTRINet.CHeatReleaseCurve.Pressure">
            <summary>
            Curve pressure in kPa
            </summary>
        </member>
        <member name="P:HTRINet.CHeatReleaseCurve.isEmpty">
            <summary>
            Returns whether the curve does not contain points
            </summary>
        </member>
        <member name="P:HTRINet.CHeatReleaseCurve.Points">
            <summary>
            The collection of HeatRelease Points
            </summary>
        </member>
        <member name="T:HTRINet.CHeatReleasePoint">
            <summary>
            Wrapper class for a single point in a heat release curve
            </summary>
        </member>
        <member name="M:HTRINet.CHeatReleasePoint.#ctor">
            <summary>
            Default constructor (empty values)
            </summary>
        </member>
        <member name="M:HTRINet.CHeatReleasePoint.#ctor(HTRICalc.HeatReleasePoint)">
            <summary>
            Constructor from HTRI heat release point
            </summary>
            <param name="point"></param>
        </member>
        <member name="M:HTRINet.CHeatReleasePoint.#ctor(CasaleThermoLibNET.CTFluid)">
            <summary>
            Construct an heat release point by using a Casale Thermo Fluid
            </summary>
            <param name="fluid"></param>
        </member>
        <member name="M:HTRINet.CHeatReleasePoint.ToHTRI(HTRICalc.HeatReleasePoint)">
            <summary>
            writes the point to the htri object
            </summary>
            <param name="point"></param>
        </member>
        <member name="P:HTRINet.CHeatReleasePoint.IsReady">
            <summary>
            Whether the point has been defined
            </summary>
        </member>
        <member name="P:HTRINet.CHeatReleasePoint.Temperature">
            <summary>
            Temperature in °C
            </summary>
        </member>
        <member name="P:HTRINet.CHeatReleasePoint.Pressure">
            <summary>
            Pressure in kPa
            </summary>
        </member>
        <member name="P:HTRINet.CHeatReleasePoint.CriticalPressure">
            <summary>
            Critical pressure in kPa
            </summary>
        </member>
        <member name="P:HTRINet.CHeatReleasePoint.CriticalTemperature">
            <summary>
            Critical temperature in °C
            </summary>
        </member>
        <member name="P:HTRINet.CHeatReleasePoint.VapourMassFraction">
            <summary>
            Vapour Mass Fraction
            </summary>
        </member>
        <member name="P:HTRINet.CHeatReleasePoint.Phases">
            <summary>
            List of existing phase at the given point
            </summary>
        </member>
        <member name="P:HTRINet.CHeatReleasePoint.Vapour">
            <summary>
            Vapour phase object
            </summary>
        </member>
        <member name="P:HTRINet.CHeatReleasePoint.Liquid">
            <summary>
            Liquid phase object
            </summary>
        </member>
        <member name="P:HTRINet.CHeatReleasePoint.MassEnthalpy">
            <summary>
             Mass Enthalpy [kJ/kg]
            </summary>
        </member>
        <member name="T:HTRINet.CPhase">
            <summary>
            Container for the HTRI phase properties (using HTRI SI Units)
            </summary>
        </member>
        <member name="M:HTRINet.CPhase.#ctor">
            <summary>
            Default constructor
            </summary>
        </member>
        <member name="M:HTRINet.CPhase.#ctor(HTRINet.CPhase.PhaseTypeEnum,System.Double,HTRICalc.PhaseProperties)">
            <summary>
            Constructor from HTRI phase properties
            </summary>
            <param name="type">Phase type</param>
            <param name="fraction">Phase fraction</param>
            <param name="props">HTRI properties</param>
        </member>
        <member name="M:HTRINet.CPhase.ToHTRI(HTRICalc.PhaseProperties)">
            <summary>
            writes the data to the HTRI properties
            </summary>
            <param name="props">HTRI Properties</param>
        </member>
        <member name="P:HTRINet.CPhase.PhaseType">
            <summary>
            Phase type identifier
            </summary>
        </member>
        <member name="P:HTRINet.CPhase.PhaseFraction">
            <summary>
            Phase fraction
            </summary>
        </member>
        <member name="P:HTRINet.CPhase.Density">
            <summary>
            Mass Density [kg/m3]
            </summary>
        </member>
        <member name="P:HTRINet.CPhase.Viscosity">
            <summary>
            Viscosity [mN/m2s=cP]
            </summary>
        </member>
        <member name="P:HTRINet.CPhase.MassCp">
            <summary>
            Mass Heat Capacity [kJ/kg K]
            </summary>
        </member>
        <member name="P:HTRINet.CPhase.ThermalConductivity">
            <summary>
            Thermal Conductivity [W/mK]
            </summary>
        </member>
        <member name="P:HTRINet.CPhase.MassEnthalpy">
            <summary>
            Mass Enthalpy [kJ/kg]
            </summary>
        </member>
        <member name="T:HTRINet.HTRISide">
            <summary>
            Wrapper class that contains the conditions for one side of an heat exchanger
            </summary>
        </member>
        <member name="M:HTRINet.HTRISide.#ctor">
            <summary>
            default constructor
            </summary>
        </member>
        <member name="M:HTRINet.HTRISide.#ctor(HTRICalc.IMaterialStream,HTRINet.HTRIExchanger,System.Boolean)">
            <summary>
            Constructs the object from a HTRI stream object and the parent exchanger
            </summary>
            <param name="stream">HTRI stream object for the side</param>
            <param name="ex">Parent Heat Exchanger</param>
            <param name="isTube">Tube (true) or Shell (false)</param>
        </member>
        <member name="M:HTRINet.HTRISide.ToHTRI">
            <summary>
            Writes the sides conditions to HTRI
            </summary>
        </member>
        <member name="M:HTRINet.HTRISide.GenerateFromCasaleThermo(CasaleThermoLibNET.CTFluid,CasaleThermoLibNET.CTFluid,System.String,System.Boolean)">
            <summary>
            Generate a HTRI Side Process Data from inlet/outlet fluid
            </summary>
            <param name="inlet">Inlet fluid</param>
            <param name="outlet">Outlet fluid</param>
            <param name="name">Fluid Name</param>
            <param name="IsoH">If steps of equal enthalpy are taken (otherwise equal temperature steps)</param>
        </member>
        <member name="M:HTRINet.HTRISide.GenerateFromCasaleThermo(System.Collections.Generic.List{CasaleThermoLibNET.CTFluid},System.String)">
            <summary>
            Generate the side by specifying a list of fluid conditions from inlet to outlet
            </summary>
            <param name="fluids">the list of fluid conditions</param>
            <param name="Name">the fluid name in HTRI</param>
        </member>
        <member name="P:HTRINet.HTRISide.Fluid">
            <summary>
            Underlying fluid object for this side, containing heat release
            </summary>
        </member>
        <member name="P:HTRINet.HTRISide.Parent">
            <summary>
            Link to the parent Heatex object
            </summary>
        </member>
        <member name="P:HTRINet.HTRISide.MassFlowRate">
            <summary>
            Mass flow rate in kg/s
            </summary>
        </member>
        <member name="P:HTRINet.HTRISide.MassVapourFraction">
            <summary>
            Mass vapour fraction
            </summary>
        </member>
        <member name="P:HTRINet.HTRISide.Temperature">
            <summary>
            Temperature in °C
            </summary>
        </member>
        <member name="P:HTRINet.HTRISide.OperatingPressure">
            <summary>
            Side operating pressure (from fluid) in kPa
            </summary>
        </member>
        <member name="P:HTRINet.HTRISide.FoulingResistance">
            <summary>
            Fouling resistance
            </summary>
        </member>
        <member name="P:HTRINet.HTRISide.Name">
            <summary>
            Fluid name
            </summary>
        </member>
        <member name="P:HTRINet.HTRISide.Phase">
            <summary>
            Returns the phase status of the side
            </summary>
        </member>
        <member name="P:HTRINet.HTRISide.SideType">
            <summary>
            Side type
            </summary>
        </member>
        <member name="T:HTRINet.HTRISide.FluidPhaseEnum">
            <summary>
            HTRI internal identification of phase type
            </summary>
        </member>
        <member name="F:HTRINet.HTRISide.FluidPhaseEnum.Unknown">
            <summary>
            No phase defined
            </summary>
        </member>
        <member name="F:HTRINet.HTRISide.FluidPhaseEnum.Condensing_Boiling">
            <summary>
            Phase changing 
            </summary>
        </member>
        <member name="F:HTRINet.HTRISide.FluidPhaseEnum.AllLiquid">
            <summary>
            Liquid phase w/o phase change
            </summary>
        </member>
        <member name="F:HTRINet.HTRISide.FluidPhaseEnum.AllVapour">
            <summary>
            Vapour phase w/o phase change
            </summary>
        </member>
        <member name="T:HTRINet.HTRISide.SideTypeEnum">
            <summary>
            HTRI side identification
            </summary>
        </member>
        <member name="F:HTRINet.HTRISide.SideTypeEnum.Shell">
            <summary>
            Shell side = 1
            </summary>
        </member>
        <member name="F:HTRINet.HTRISide.SideTypeEnum.Tube">
            <summary>
            Tube side = 0
            </summary>
        </member>
        <member name="T:HTRINet.HTRIGlobals">
            <summary>
            Helper class to write values to HTRI objects
            </summary>
        </member>
        <member name="F:HTRINet.HTRIGlobals.OK">
            <summary>
            OK value in HTRI = -1
            </summary>
        </member>
        <member name="F:HTRINet.HTRIGlobals.EMPTY">
            <summary>
            EMPTY value in HTRI = -1.0e24
            </summary>
        </member>
        <member name="M:HTRINet.HTRIGlobals.WriteDouble(System.Object,System.Object,System.Double)">
            <summary>
            Safely writes double value to a property of a HTRI object
            </summary>
            <param name="target">HTRI object holding the property</param>
            <param name="key">Property key</param>
            <param name="value">value to be set</param>
        </member>
        <member name="M:HTRINet.HTRIGlobals.WriteInput(System.Object,System.Object,System.Double,System.Object)">
            <summary>
            Safely writes double value to a property of HTRI object setting as Input
            </summary>
            <param name="target">HTRI object</param>
            <param name="key">Property key</param>
            <param name="value">Value to be set</param>
            <param name="arg">Additional parameter (like side, ...)</param>
        </member>
        <member name="T:HTRINet.HTRIExchanger">
            <summary>
            Wrapper .NET class for a HTRI Shell and Tube exchanger (Xist)
            An Exchnager object contains minimal properties and two HTRISides objects
            </summary>
        </member>
        <member name="M:HTRINet.HTRIExchanger.#ctor">
            <summary>
            Default constructor
            </summary>
        </member>
        <member name="M:HTRINet.HTRIExchanger.#ctor(System.String)">
            <summary>
            Reads an existing HTRI file into a HTRIExchanger object filling the HeatReleaseCurves
            </summary>
            <param name="filename"></param>
        </member>
        <member name="M:HTRINet.HTRIExchanger.Save">
            <summary>
            Save the .HTRI file
            </summary>
        </member>
        <member name="M:HTRINet.HTRIExchanger.Save(System.String)">
            <summary>
            Save to a given .HTRI filename
            </summary>
            <param name="filename"></param>
        </member>
        <member name="P:HTRINet.HTRIExchanger.FileName">
            <summary>
            Linked HTRI FileName
            </summary>
        </member>
        <member name="P:HTRINet.HTRIExchanger.ExchangerDuty">
            <summary>
            Exchanger Duty in MW (HTRI Std)
            </summary>
        </member>
        <member name="P:HTRINet.HTRIExchanger.DutyFlowMultiplier">
            <summary>
            Duty flow multiplier used in HTRI
            </summary>
        </member>
        <member name="P:HTRINet.HTRIExchanger.HexUnit">
            <summary>
            Pointer to HTRI HexUnit
            </summary>
        </member>
        <member name="P:HTRINet.HTRIExchanger.TransferUnit">
            <summary>
            Pointer to the HTRI TransferUnit object
            </summary>
        </member>
        <member name="P:HTRINet.HTRIExchanger.ColdSide">
            <summary>
            Cold side object
            </summary>
        </member>
        <member name="P:HTRINet.HTRIExchanger.HotSide">
            <summary>
            Hot side object
            </summary>
        </member>
        <member name="P:HTRINet.HTRIExchanger.TubeSide">
            <summary>
            Tube side object
            </summary>
        </member>
        <member name="P:HTRINet.HTRIExchanger.ShellSide">
            <summary>
            Shell side object
            </summary>
        </member>
        <member name="P:HTRINet.HTRIExchanger.ColdFluid">
            <summary>
            Fluid of the cold side
            </summary>
        </member>
        <member name="P:HTRINet.HTRIExchanger.HotFluid">
            <summary>
            Fluid of the hot side
            </summary>
        </member>
        <member name="T:HTRINet.HTRIFluid">
            <summary>
            Wrapper .NET class for IMaterialStreamStrm
            Contains the link to the HTRI stream objects and to the .NET curves
            </summary>
        </member>
        <member name="M:HTRINet.HTRIFluid.#ctor">
            <summary>
            Default constructor
            </summary>
        </member>
        <member name="M:HTRINet.HTRIFluid.#ctor(HTRICalc.IMaterialStream)">
            <summary>
            Overlaoded constructor from HTRI object
            </summary>
            <param name="strm"></param>
        </member>
        <member name="M:HTRINet.HTRIFluid.ToHTRI">
            <summary>
            Writes the stream and fluid data to HTRI
            </summary>
        </member>
        <member name="P:HTRINet.HTRIFluid.Name">
            <summary>
            Fluid name
            </summary>
        </member>
        <member name="P:HTRINet.HTRIFluid.OperatingPressure">
            <summary>
            Operating pressure
            </summary>
        </member>
        <member name="P:HTRINet.HTRIFluid.Curves">
            <summary>
            List of heat release curves
            </summary>
        </member>
        <member name="P:HTRINet.HTRIFluid.NumberOfNonEmptyCurves">
            <summary>
            Number of defined curves
            </summary>
        </member>
    </members>
</doc>
lijunle commented 8 years ago

It is caused by ° character in line 87

85        <member name="P:HTRINet.CHeatReleasePoint.Temperature">
86            <summary>
87            Temperature in °C
88            </summary>
89        </member>

And stack trace:

Unhandled Exception: System.Xml.XmlException: Invalid character in the given encoding. Line 87, position 28.
   at System.Xml.XmlTextReaderImpl.Throw(Exception e)
   at System.Xml.XmlTextReaderImpl.Throw(String res, String arg)
   at System.Xml.XmlTextReaderImpl.InvalidCharRecovery(Int32& bytesCount, Int32& charsCount)
   at System.Xml.XmlTextReaderImpl.GetChars(Int32 maxCharsCount)
   at System.Xml.XmlTextReaderImpl.ReadData()
   at System.Xml.XmlTextReaderImpl.ParseText(Int32& startPos, Int32& endPos, Int32& outOrChars)
   at System.Xml.XmlTextReaderImpl.FinishPartialValue()
   at System.Xml.XmlTextReaderImpl.get_Value()
   at System.Xml.Linq.XContainer.ReadContentFrom(XmlReader r)
   at System.Xml.Linq.XContainer.ReadContentFrom(XmlReader r, LoadOptions o)
   at System.Xml.Linq.XDocument.Load(XmlReader reader, LoadOptions options)
   at System.Xml.Linq.XDocument.Load(String uri, LoadOptions options)
   at Vsxmd.Program.Main(String[] args)

Thrown from this line.

lijunle commented 8 years ago

Sorry, it seems the previous exception is caused by my file encoding. That is not the case.


The real exception stack error is:

Unhandled Exception: System.InvalidOperationException: Sequence contains no elements
   at System.Linq.Enumerable.Aggregate[TSource](IEnumerable`1 source, Func`3 func)
   at Vsxmd.Units.Extensions.ToMarkdownText(XElement element)
   at Vsxmd.Units.ParamUnit.ToMarkdown()
   at Vsxmd.Units.ParamUnit.<>c.<ToMarkdown>b__7_1(ParamUnit unit)
   at System.Linq.Enumerable.<SelectManyIterator>d__1`2.MoveNext()
   at System.Linq.Enumerable.<ConcatIterator>d__1`1.MoveNext()
   at System.String.Join(String separator, IEnumerable`1 values)
   at Vsxmd.Units.ParamUnit.ToMarkdown(IEnumerable`1 elements, IEnumerable`1 paramTypes, MemberKind memberKind)
   at Vsxmd.Units.MemberUnit.get_Params()
   at Vsxmd.Units.MemberUnit.ToMarkdown()
   at Vsxmd.Converter.<>c.<ToMarkdown>b__3_0(IUnit x)
   at System.Linq.Enumerable.<SelectManyIterator>d__1`2.MoveNext()
   at System.String.Join(String separator, IEnumerable`1 values)
   at Vsxmd.Converter.ToMarkdown()
   at Vsxmd.Program.Main(String[] args)

Do a rough check, it is caused by the <param name="curve"></param> not having a description. The exception is thrown from Extensions.ToMarkdownText function.

lijunle commented 8 years ago

@aguarino77

I released v1.0.1 to fix this. Please check it.

Thanks for reporting bugs.

aguarino77 commented 8 years ago

This worked perfectly. Thank you.