React应用程序的XML站点地图

6

我有一个React应用程序,想要添加一个sitemap.xml。我已经添加了这个路由来链接到该文件(XML是我的sitemap.xml):

import XML from './sitemap.xml';    
<Route component={XML} path={'/sitemap.xml'} />

我一直遇到这个错误,我理解它的意思是我需要在我的webpack中添加xml加载器:

You may need an appropriate loader to handle this file type.

不确定如何选择xml加载器,因为我大多数情况下只能找到解析器(将xml转换为json),而且我不确定在json中拥有站点地图是否可以接受。此外,是否有其他本地方法可以显示xml文件而不添加任何加载器?

3个回答

7
如果您正在使用create-react-app,只需将XML文件放在public文件夹中(与node_modules和src文件夹并列),然后通过{base_url}/{XML_file_name.xml}访问它(例如localhost:3000/sitemap.xml)。

我认为这是正确的答案。简单明了! - GalAbra
3
在本地主机上,我的 sitemap.xml 可以通过 http://localhost:3000/sitemap.XML 访问,但是当我将这个应用部署到 AWS Amplify 上时,它不能通过 {baseURL}/{sitemap.xml} 访问。有什么建议吗? - umer
对于Amplify,您需要添加重定向规则。请参考:https://docs.aws.amazon.com/amplify/latest/userguide/redirects.html - Jasbindar Singh

1

在中,关键字组件应该是一个React组件。

请查看文档:Route - React Router


如果您想将XML作为变量传递,应将XML格式更改为字符串,并使用另一个属性而不是component={}。在传递到路由之前,请尝试将XML转换为字符串,使用escape(XML)。请检查escape(str)
使用 import 关键字,您可以像这样尝试:

// file: get-xml.js
let transformXMLToString = () => {

  // read the target XML fiel and transform it to String
  
  // return the string
  return XMLasString;
};

export transformXMLToString;

// then you could import the XML like this in another file:

import transformXMLToString from 'get-xml.js';

// then pass it to <Route> like:

<Route component={transformXMLToString()}/>


抱歉,我不确定这该如何准确完成。我已通过导入xml的方式更新了路由,以防您能够帮助处理该行或者提供任何有用的链接来帮助处理此问题。 - aiiwa
我的意思是尝试将XML转换为字符串类型并作为字符串传递给路由,然后将字符串转换回XML类型!@aiiwa - Robin Chen
好的,按照建议尝试了转义(虽然它已被记录为不推荐使用),但它没有起作用。 - aiiwa
为什么要将XML作为“component={XML}”传递给路由? - Robin Chen
<Route path="/" component={App}> 中,关键字 component 应该是一个 React 组件。 - Robin Chen
谢谢。我试过了,但仍然出现错误:模块解析失败:xxx\sitemap.xml 意外的标记(1:0)。 您可能需要一个适当的加载器来处理此文件类型。 - aiiwa

0
一个简单的解决方案是添加 <a href="XML_PATH" style={{display:"none"}}>xml</a> 然后检查你的 Google Chrome 开发控制台,搜索锚点(a)标签。 并跟随路径。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接