@@ -90,22 +90,36 @@ public override async Task<CSharpSyntaxNode> DefaultVisit(SyntaxNode node)
9090 . WithNodeInformation ( node ) ;
9191 }
9292
93+ public override async Task < CSharpSyntaxNode > VisitXmlEmbeddedExpression ( VBSyntax . XmlEmbeddedExpressionSyntax node ) =>
94+ await node . Expression . AcceptAsync < ExpressionSyntax > ( TriviaConvertingExpressionVisitor ) ;
95+
9396 public override async Task < CSharpSyntaxNode > VisitXmlElement ( VBasic . Syntax . XmlElementSyntax node )
9497 {
9598 _extraUsingDirectives . Add ( "System.Xml.Linq" ) ;
96- var aggregatedContent = node . Content . Select ( n => n . ToString ( ) ) . Aggregate ( String . Empty , ( a , b ) => a + b ) ;
97- var xmlAsString = $ "{ node . StartTag } { aggregatedContent } { node . EndTag } ". Trim ( ) ;
99+ var interpolations = await AcceptXmlInterpolated ( node ) ;
100+ var interpolationsList = SyntaxFactory . List ( interpolations ) ;
101+ var xmlAsString = $ "{ node . StartTag } { interpolationsList } { node . EndTag } ". Trim ( ) ;
102+ var interpolatedString = SyntaxFactory . InterpolatedStringExpression ( SyntaxFactory . Token ( SyntaxKind . InterpolatedStringStartToken ) , interpolationsList , SyntaxFactory . Token ( SyntaxKind . InterpolatedStringEndToken ) ) ;
98103 return SyntaxFactory . InvocationExpression (
99104 SyntaxFactory . MemberAccessExpression (
100105 SyntaxKind . SimpleMemberAccessExpression ,
101106 SyntaxFactory . IdentifierName ( "XElement" ) ,
102107 SyntaxFactory . IdentifierName ( "Parse" ) ) )
103- . WithArgumentList (
104- ExpressionSyntaxExtensions . CreateArgList (
105- SyntaxFactory . LiteralExpression ( SyntaxKind . StringLiteralExpression ,
106- SyntaxFactory . Literal ( xmlAsString ) )
107- )
108- ) ;
108+ . WithArgumentList ( ExpressionSyntaxExtensions . CreateArgList ( interpolatedString ) ) ;
109+ }
110+
111+ private static InterpolatedStringTextSyntax InterpolatedStringText ( string text ) =>
112+ SyntaxFactory . InterpolatedStringText ( SyntaxFactory . Token ( SyntaxFactory . TriviaList ( ) , SyntaxKind . InterpolatedStringTextToken , text , text , SyntaxFactory . TriviaList ( ) ) ) ;
113+
114+ private async Task < IEnumerable < InterpolatedStringContentSyntax > > AcceptXmlInterpolated ( VBSyntax . XmlNodeSyntax n )
115+ {
116+ if ( n is VBSyntax . XmlElementSyntax xmlEs ) {
117+ return InterpolatedStringText ( xmlEs . StartTag . ToString ( ) ) . Yield ( )
118+ . Concat ( await xmlEs . Content . SelectManyAsync ( AcceptXmlInterpolated ) )
119+ . Concat ( InterpolatedStringText ( xmlEs . EndTag . ToString ( ) ) ) ;
120+ }
121+ var expression = await n . AcceptAsync < ExpressionSyntax > ( TriviaConvertingExpressionVisitor ) ;
122+ return new [ ] { SyntaxFactory . Interpolation ( expression ) } ;
109123 }
110124
111125 /// <summary>
0 commit comments